2017-06-06 4 views
0

HTTPリクエストで応答ストリームでファイルの一部を送信するにはどうすればよいですか?ストリームを使用して巨大なコンテンツの範囲を送信する

巨大なファイルの任意のContent-Rangeを送信したいと思います。

fs.createReadStream('hugeFile.bin').pipe(response)を読んでいるストリームの一部を除外するときにイベントを使用することはできません。私は偽の書き込み可能なストリームを作成することができます。これはデータの一部を省略します(> /dev/nullなど)が、chunkのサイズは送信する最初の部分の倍数ではありません。

この問題を解決するにはどうすればよいですか?

答えて

1

https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_createreadstream_path_optionsをご覧ください。

特に、startendオプション - ファイルのバイトオフセットを設定して読み込みを開始および終了することができます。

fs.createReadStream('hugeFile.bin', { start: firstByte, end: lastByte }).pipe(response) 

または道徳的同等のものを、それはあなたがやりたいと思います:

だから、基本的に、あなたは何だろう。

+0

私が 'response.statusCode = 216;'を実行すると 'response.setHeader( 'Content-Range'、 'bytes' + start + ' - ' +(end-1)+ '/' + stat.size) ; '、ストリームを介してファイルの内容を送信するにはどうすればよいですか?あなたが書いたコード行の後に 'response.end();'を呼びますか? – Orient

+0

代わりに 'fs.createReadStream( 'hugeFile.bin'、{start:firstByte、end:lastByte})'オブジェクトの '' end''イベントハンドラで 'response.end();'を実行する必要がありますか? – Orient

+0

ソースストリームが終了すると、response.endが自動的に呼び出されます。それはうまくいくはずです。 –

関連する問題