2016-04-06 28 views
1

私は奇妙な問題があります。私はNodeJsでのファイルダウンロードのリクエストを使用しています。大きなファイル(250MB以上)をダウンロードするたびに、それらはメモリにダウンロードされ、ファイルシステムに直接ストリームされません。たぶん私は間違って何かをしているが、私はテストケースを作ったし、ファイルはまだストリーミングされていません。サンプル1GBのファイルをダウンロードし、このテストケースi`mでNodeJsストリーミング要求からファイルシステムにファイルがありません

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); 

、あなたはタスクマネージャでノードproccessを見れば、それはファイルをダウンロードするように、> 1ギガバイトに成長します。 私は自分のノード・アプリケーションは、問題はあなたがコールバックのパラメータの一つは、応答の全体bodyであるため、暗黙的にrequest内のバッファリングを可能にするコールバックを渡しているということであるラム

+0

が役立つかもしれない:http://stackoverflow.com/a/19708936/5388620 – Shanoor

答えて

2

の200メガバイト以上でないと使用することを望みます。

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); 
関連する問題