2017-06-06 52 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( '內容範圍', '字節' +開始+ ' - ' +(端 - 1)+ '/' + stat.size) ;',那我該怎麼做才能通過流發送文件內容?我應該在你寫的代碼行之後調用'response.end();'嗎? – Orient

+0

或者相反,我應該做的到Response.End'();'在' ''fs.createReadStream的end''事件處理(' hugeFile.bin',{開始:firstByte,結束:lastByte})'對象? – Orient

+0

response.end將在源流結束時自動調用。它應該只是工作。 –