在不使用第三方庫的情況下在 Node JS 中下載檔案

Isaac Tony 2023年10月12日
  1. 在 NodeJS 中下載檔案
  2. 使用 fs 模組在指定位置建立檔案
在不使用第三方庫的情況下在 Node JS 中下載檔案

Node js 在其大部分操作中大量使用第三方庫。

但是,在執行下載檔案等操作時,我們也可以通過在程式中要求它們來使用作為 Node js 核心一部分的內建包或模組。

在 NodeJS 中下載檔案

我們可以使用 fsHTTP 模組下載 Node js 中的任何檔案。

fs 模組為我們提供了處理系統上檔案的功能,此外還可以訪問一系列非同步方法來對檔案執行其他基本操作,例如重新命名和刪除。

另一方面,Nodejs 在其標準庫中提供了標準的 HTTPHTTPS 模組。使用這種方法,我們可以請求使用相同模組的伺服器。

我們還可以建立一個監聽埠並做出響應的伺服器。首先,我們需要使用主檔案 index.js 建立一個簡單的 Node js 應用程式才能開始。

現在在這個檔案下,使用 require() 函式,我們將需要 fs 模組和 HTTP 模組,而無需任何事先安裝,如下所示。

const http = require('https');
const fs = require('fs');

使用 http.get() 方法,我們會將端點作為第一個引數傳遞給我們要下載的資源,然後是一個 callback 函式,該函式的工作是在收到檔案流後執行並使用函式中指定的名稱在我們的本地系統中建立檔案。

使用 streams 可以讓我們更快地下載此檔案,因為我們不必等到整個資料負載載入完畢。一旦資料可用於響應 HTTP 客戶端,流處理過程就開始了。

使用 streams 支援的 Node js API fs.createWriteStream(),我們將為我們想要建立的檔案建立一個可寫流。此方法只接受一個引數:我們希望儲存檔案的位置。

使用 fs 模組在指定位置建立檔案

const https = require('https');
const fs = require('fs');

const endpoint = 'https://query.data.world/s/5r2olboe2fb24vewtt2yr3ktp4kwoi';

https.get(endpoint, (res) => {
  const file_name = 'electricvehicles.csv';
  const writeStream = fs.createWriteStream(file_name);
});

請注意,由於 fs 模組會自動儲存當前資料夾,我們已經指定了我們想要下載的檔案的名稱。

最後,使用通常在檔案流上呼叫的 pipe() 方法,我們將通過管道將檔案流傳輸到 HTTP 響應並使用 writeStream.close() 方法關閉寫入流。

const https = require('https');
const fs = require('fs');

const endpoint = 'https://query.data.world/s/5r2olboe2fb24vewtt2yr3ktp4kwoi';

https.get(endpoint, (res) => {
  const file_name = 'electricvehicles.csv';
  const writeStream = fs.createWriteStream(file_name);

  res.pipe(writeStream);

  writeStream.on('end', function() {
    writeStream.close();
    console.log('Thed download is Completed');
  });
});

執行上面的程式碼會下載當前資料夾中的 CSV 檔案,該檔案以程式碼中指定的名稱命名,如下所示。

檔案下載

作者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

相關文章 - Node.js File