ホームページ >ウェブフロントエンド >フロントエンドQ&A >Nodejsでファイルをダウンロードする方法
Node.js は、サーバー側で JavaScript コードを実行できる JavaScript ランタイム環境で実行される、オープンソースのクロスプラットフォームの JavaScript ランタイムです。 Node.js は、高性能でスケーラブルな Web アプリケーションの開発に広く使用されています。その中でもファイルのダウンロードはWebサイトの基本機能の一つですが、Node.jsでもファイルのダウンロード機能を簡単に実装できます。この記事では、Node.js でファイルをダウンロードする方法について詳しく説明します。
1. HTTP モジュールを使用してファイルをダウンロードする
Node.js では、HTTP モジュールを使用してファイルをダウンロードできます。 HTTP モジュールは Node.js のコア モジュールの 1 つで、HTTP クライアントとサーバーを作成するための API を提供します。
ファイルをダウンロードするには、次の基本手順を実行する必要があります:
(1) HTTP リクエストを作成します。
(2) HTTP リクエストを送信します。
(3) 応答をファイルに書き込みます。
以下は基本コードです:
const http = require('http'); const fs = require('fs'); const fileUrl = 'http://example.com/file.pdf'; const filePath = './file.pdf'; const request = http.get(fileUrl, (response) => { const fileStream = fs.createWriteStream(filePath); response.pipe(fileStream); }); request.on('error', (err) => { console.error(`请求下载文件出错: ${err.message}`); }); request.end();
上記のコードでは、まず HTTP モジュールの get メソッドを通じて HTTP リクエストを作成します。リクエストのコールバック関数では、書き込み可能なファイル ストリームを作成し、パイプを通じてファイル ストリームにレスポンスを書き込み、ファイルをディスクに書き込みます。
大きなファイルのダウンロードの場合、ダウンロードの進行状況を把握することが非常に重要です。組み込みの Content-Length
ヘッダーを使用してファイルのサイズを取得し、組み込みの progress
イベントを使用してダウンロードの進行状況を追跡できます。以下に例を示します。
const http = require('http'); const fs = require('fs'); const url = 'http://example.com/file.zip'; const filePath = './file.zip'; http.get(url, (response) => { const contentLength = parseInt(response.headers['content-length']); let downloadedLength = 0; response.pipe(fs.createWriteStream(filePath)); response.on('data', (chunk) => { downloadedLength += chunk.length; const percent = downloadedLength / contentLength * 100; console.log(`${percent}% downloaded`); }); response.on('end', () => { console.log('下载完成'); }); }).on('error', (err) => { console.error(`请求下载文件出错: ${err.message}`); });
上記のコードでは、組み込みの data
イベントを使用してダウンロードの進行状況を追跡し、Content-Length
ダウンロードの割合を計算するためのヘッダー。ダウンロードが完了すると、「ダウンロードが完了しました」というメッセージが出力されます。
ファイルのダウンロード リンクがリダイレクトされる場合があります。応答のステータス コードが 301 か 302 かを確認し、Location
ヘッダーを使用してリダイレクトされたリンクを取得できます。サンプル コードは次のとおりです。
const http = require('http'); const https = require('https'); const fs = require('fs'); function downloadFile(url, filePath) { const httpClient = url.startsWith('https') ? https : http; httpClient.get(url, (response) => { const { statusCode } = response; if (statusCode === 301 || statusCode === 302) { console.warn(`文件重定向: ${response.headers.location}`); downloadFile(response.headers.location, filePath); return; } if (statusCode !== 200) { console.error(`请求下载文件出错: 状态码 ${statusCode}`); return; } response.pipe(fs.createWriteStream(filePath)).on('close', () => { console.log('下载完成'); }); }).on('error', (err) => { console.error(`请求下载文件出错: ${err.message}`); }); } const url = 'http://example.com/file.zip'; const filePath = './file.zip'; downloadFile(url, filePath);
上記のコードでは、httpClient
変数を使用してプロトコル (http または https) を確認し、statusCode
を使用して応答を確認します。ステータスコード。 301または302の場合は、リダイレクトされたメッセージを出力し、ファイルを再ダウンロードしてください。 200以外の場合はエラーメッセージが出力されます。
2. Request モジュールを使用してファイルをダウンロードする
Node.js には、HTTP モジュールに加えて、ファイルのダウンロードに使用できる一般的なサードパーティ モジュールもいくつかあります。最も人気のあるのは Request モジュールです。 Request モジュールは、Mikeal Rogers によって作成された、シンプルで強力、そしてユーザーフレンドリーな HTTP クライアントです。
ファイルのダウンロードに Request モジュールを使用するには、まずそれをインストールする必要があります。コマンド ラインで次のコマンドを実行してインストールできます。
npm install request --save
Request モジュールを使用してファイルをダウンロードするための基本的な手順は、次のようになります。 HTTPモジュールを使用します。以下は簡単な例です。
const request = require('request'); const fs = require('fs'); const url = 'http://example.com/file.zip'; const filePath = './file.zip'; request(url) .pipe(fs.createWriteStream(filePath)) .on('finish', () => { console.log('下载完成'); }) .on('error', (err) => { console.error(`请求下载文件出错: ${err.message}`); });
上記のコードでは、request
メソッドを使用して HTTP リクエストを作成し、パイプ経由でファイル ストリームに応答を書き込みます。ダウンロードが完了すると、「ダウンロードが完了しました」というメッセージが出力されます。
ダウンロードの進行状況を処理するには、request
メソッドによって返されるリクエスト オブジェクトを使用できます。ファイルのサイズは、組み込みの Content-Length
ヘッダーを使用して取得できます。さらに、Request モジュールは、ダウンロードの進行状況を追跡できる組み込みの progress
イベントを提供します。以下に例を示します。
const request = require('request'); const fs = require('fs'); const url = 'http://example.com/file.zip'; const filePath = './file.zip'; const fileStream = fs.createWriteStream(filePath); let downloadedLength = 0; request(url) .on('response', (response) => { const contentLength = parseInt(response.headers['content-length']); console.log(`文件大小: ${(contentLength / 1024 / 1024).toFixed(2)} MB`); response.on('data', (data) => { downloadedLength += data.length; const percent = downloadedLength / contentLength * 100; console.log(`${percent.toFixed(2)}% downloaded`); }); }) .pipe(fileStream) .on('finish', () => { console.log('下载完成'); }) .on('error', (err) => { console.error(`请求下载文件出错: ${err.message}`); });
上記のコードでは、response
イベントを使用してファイルのサイズを取得し、組み込みの data
イベントを使用してファイルのサイズを取得します。ダウンロードの割合を計算して出力します。
HTTP モジュールと同様に、Request モジュールを使用してファイル ダウンロード リンクのリダイレクトを処理することもできます。以下に例を示します。
const request = require('request'); const fs = require('fs'); const url = 'http://example.com/file.pdf'; const filePath = './file.pdf'; function downloadFile(url, filePath) { request(url) .on('response', (response) => { const { statusCode } = response; if (statusCode === 301 || statusCode === 302) { console.warn(`文件重定向: ${response.headers.location}`); downloadFile(response.headers.location, filePath); return; } if (statusCode !== 200) { console.error(`请求下载文件出错: 状态码 ${statusCode}`); return; } response.pipe(fs.createWriteStream(filePath)).on('finish', () => { console.log('下载完成'); }); }) .on('error', (err) => { console.error(`请求下载文件出错: ${err.message}`); }); } downloadFile(url, filePath);
上記のコードでは、statusCode
を使用して応答のステータス コードを確認します。 301または302の場合は、リダイレクトされたメッセージを出力し、ファイルを再ダウンロードしてください。 200以外の場合はエラーメッセージが出力されます。
概要
この記事では、HTTP モジュールと Request モジュールを使用して Node.js でファイルをダウンロードする方法を紹介します。これには、HTTP モジュールとリクエスト モジュールを使用したファイルのダウンロード、ダウンロードの進行状況の処理、およびファイル ダウンロード リンクのリダイレクトの処理に関する基本的な手順が含まれています。 Node.jsには非常に便利なファイルダウンロード機能が用意されており、ファイルのダウンロードを簡単に実装することができます。
以上がNodejsでファイルをダウンロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。