1. ホーム
  2. node.js

[解決済み] Node.js レスポンスでファイルを送信する

2022-07-03 03:10:35

質問

Expressjsフレームワークには sendfile() というメソッドがあります。フレームワーク全体を使用せずにそれを行うにはどうすればよいですか?

私はアーカイブを作成するためにnode-native-zipを使用しており、私はそれをユーザーに送りたいです。

どのように解決するのですか?

以下は、myfile.mp3をディスクからストリーミングで送信するサンプルプログラムです(つまり、ファイルを送信する前にファイル全体をメモリに読み込むことはしません)。サーバーはポート 2000 でリッスンします。

[更新]

コメントで@Aftershockさんがおっしゃっている通りです。 util.pump がなくなり、代わりに Stream プロトタイプのメソッドである pipe というストリームプロトタイプのメソッドに置き換えられました。

var http = require('http'),
    fileSystem = require('fs'),
    path = require('path');

http.createServer(function(request, response) {
    var filePath = path.join(__dirname, 'myfile.mp3');
    var stat = fileSystem.statSync(filePath);

    response.writeHead(200, {
        'Content-Type': 'audio/mpeg',
        'Content-Length': stat.size
    });

    var readStream = fileSystem.createReadStream(filePath);
    // We replaced all the event handlers with a simple call to readStream.pipe()
    readStream.pipe(response);
})
.listen(2000);

引用元 http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/