簡體   English   中英

NodeJs將文件從請求傳輸到文件系統而不是內存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM