序文
HTTPを使用してファイルをダウンロードする場合、サーバーに関連する応答ヘッダーを設定し、バイナリを使用してファイルデータを送信する必要があり、クライアント(ブラウザー)は応答ヘッダーに基づいてファイルデータを受信します。 node.jsでは、応答ヘッダーを設定した後、ファイルストリームを読み取り、 “.pipe()”メソッドを使用して応答オブジェクトResponseにストリームを転送すると、単純なファイルダウンロードサーバーを実装できます。
1。ファイルのダウンロード紹介
HTTPは、リクエストヘッダーと応答ヘッダーに基づいて状態相互作用を実装します。サーバーの正しい応答ステータスを取得した後、クライアントは最初に応答ヘッダーを解析し、応答ヘッダーに基づいてデータ(応答本体)を受信および表示します。ファイルのダウンロードの場合、実装プロセスは次のとおりです。
1.クライアントはファイルリソース要求を開始します
2。サーバーは、対応するファイルを探し、「 Content-Type 」や「 Content-Disposition 」などの応答ヘッダーを設定して、それぞれファイルの「MIME」タイプとファイルの説明を表します。
3.クライアントは、サーバーによって返された応答ヘッダーに基づいてファイルデータを解析および受信します。
設定する必要がある応答ヘッダー
ファイルのダウンロードヘッダーを設定する場合、一般的に使用されるHTTP応答ヘッダーに加えて、次の2つの応答ヘッダーを設定することがより重要です。
コンテンツタイプ:アプリケーション/Octet-StreamContent-Disposition:添付ファイル。 filename = myfilename.ext
上記の設定では、「 Content-Type: application/octet-stream 」は、これがバイナリファイルであることをブラウザに伝え、「 Content-Disposition 」は、これをダウンロードする必要がある添付ファイルであることをブラウザに伝え、ブラウザにデフォルトのファイル名を伝えます。 「 Content-Disposition 」応答ヘッダーが追加されていない場合、ブラウザはファイルコンテンツをダウンロードまたは表示し、さまざまなブラウザの処理が異なります。
2。Node.jsファイルダウンロードサーバーの実装
次に、Expressフレームワークに基づいてSimple Fileダウンロードサーバーを実装します。これには、主にサーバーファイルの閲覧とファイルのダウンロードという2つの機能が含まれます。
2.1ルートの追加
Expressアプリケーションを作成した後、次の2つのルートを追加します。
router.get( '/files'、function(req、res、next){// show server file}); router.get( '/file/:filename'、function(req、res、next){//ファイルダウンロード}を実装);上記で追加された2つのルートは、次のように使用されます。サーバーファイルを表示し、ファイルのダウンロードを実装します。
2.2サーバーファイルを表示します
サーバーファイルの表示を実現するには、「 fs 」モジュールを介してファイルディレクトリを読み取り、ファイル/ディレクトリチェックなどを実行する必要があります。「パス」モジュールを使用してファイルパスを処理する必要があります。まず、これら2つのモジュールが紹介されます。
const fs = require( 'fs'); const path = require( 'path');
サーバーファイルを表示するための実装コードは次のとおりです。
router.get( '/files'、function(req、res、next){// show server file // file directory var filepath = path.join(__ dirname、 './'); fs.readdir(filepath、function(err、results){if(err)shrow err; if(results.length> 0){var files = [file); if(filepath、file))。isfile()){file);上記のコードでは、ディレクトリを読んだ後、ダウンロード可能なファイルのリストがビューファイル「 files.ejs 」を介して表示されます。コードは次のとおりです。
<!doctype html> <html> <head> <title>ダウンロードファイルの選択</title> </head> <body> <h1>ダウンロードファイルを選択してください:</h1> <%if(files.length> 0){%> <ul> <%files.foreach(fultion(file){%> <li> <a href = "/< %> </a> </li> <%})%> </ul> <%} else {%> <p>ダウンロード可能なファイルなし... </p> <%}%> </body> </html>2.3ファイルのダウンロードを実装します
ファイルをダウンロードするときは、最初にファイルを「 Buffer 」に読み取り、次に「 res.send()”または「 res.end()”メソッドを介してファイルデータを送信するか、ストリーム(「 Stream 」)に基づいてファイルデータを送信できます。 「 Stream 」を使用してファイルのダウンロードを実装する場合、「 fs.createReadStream()”メソッドを使用して読み取り可能なストリームを作成できます。応答オブジェクトResponse書き込み可能なストリームです。このようにして、 ”.pipe()”メソッドを介してファイルストリームをResponse応答ストリームに転送する必要があります。
ファイルのダウンロード実装コードは次のとおりです。
router.get( '/file/:filename'、function(req、res、next){//ファイルの実装var filename = req.params.filename; var filepath = path.join(__ dirname、filename); var stats = fs.statsync(filepath); 「アプリケーション/オクテットストリーム」、 '添付ファイル='+filename:stats.size})要約します
上記は、node.jsを使用してHTTPファイルのダウンロードを実現するすべてのコンテンツです。 node.jsを学ぶのが誰でも役立つことを願っています。