[英]NodeJs streaming File from request to Filesystem not Memory
我有一個奇怪的問題。 我在NodeJs中使用文件下載請求,每次下載較大的文件(> 250mb)時,它們都會被下載到內存中,而不是直接流式傳輸到文件系統。 也許我做錯了什么,但我做了一個測試用例,文件仍然沒有得到流。
var request = require('request');
var fs = require('fs');
var writable = fs.createWriteStream("1GB.zip");
var stream = request.get({
uri: "http://ipv4.download.thinkbroadband.com/1GB.zip",
encoding: null
}, function(error, response, body) {
console.log("code:", response.statusCode);
if (response.statusCode >= 500) {
log.err(response.statusCode, " Servererror", file.url);
}
}).pipe(writable);
在這個測試用例中,我正在下載一個1GB的樣本文件,如果你用任務管理器觀察節點進程,它會在下載文件時增長到> 1GB。 我希望我的Node應用程序使用不超過200mb的Ram
問題是您正在傳遞一個回調,它會隱式啟用request
內部的緩沖,因為回調的其中一個參數是響應的整個body
。
如果您想知道response
何時可用,請只需偵聽response
事件:
var request = require('request');
var fs = require('fs');
var writable = fs.createWriteStream("1GB.zip");
var stream = request.get({
uri: "http://ipv4.download.thinkbroadband.com/1GB.zip",
encoding: null
}).on('response', function(response) {
console.log("code:", response.statusCode);
if (response.statusCode >= 500) {
log.err(response.statusCode, " Servererror", file.url);
}
}).pipe(writable);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.