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 モジュールのインストール
ファイルのダウンロードに 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この記事では、functionコンポーネントでのデータフェッチやDOM操作などの副作用を管理するためのフックであるReactの使用Effectについて説明します。メモリリークなどの問題を防ぐための使用、一般的な副作用、およびクリーンアップについて説明します。

怠zyな読み込みは、必要になるまでコンテンツの読み込みを遅延させ、初期負荷時間とサーバーの負荷を削減することにより、Webパフォーマンスとユーザーエクスペリエンスを改善します。

JavaScriptの高次関数は、抽象化、共通パターン、および最適化技術を通じて、コードの簡潔さ、再利用性、モジュール性、およびパフォーマンスを強化します。

この記事では、JavaScriptのカレーについて説明します。これは、マルチアーグメント関数を単一argument関数シーケンスに変換する手法です。 Curryingの実装、部分的なアプリケーションなどの利点、実用的な用途、コード読み取りの強化を調査します

この記事では、Virtual DOMツリーを比較してDOMを効率的に更新するReactの調整アルゴリズムについて説明します。パフォーマンスの利点、最適化技術、ユーザーエクスペリエンスへの影響について説明します。

記事では、Connect()、MapStateToprops、MapDispatchToprops、およびパフォーマンスへの影響を説明するReduxストアに反応コンポーネントをReduxストアに接続します。

この記事では、ReactのUseContextを説明しています。これにより、小道具掘削を避けることで国家管理を簡素化します。再レンダーの削減により、集中状態やパフォーマンスの改善などの利点について説明します。

記事では、PreventDefault()メソッドを使用して、イベントハンドラーのデフォルト動作の防止、ユーザーエクスペリエンスの強化などの利点、およびアクセシビリティの懸念などの潜在的な問題について説明します。
