2012-08-10 145 views
17

我通過http獲取一些二進制數據。我的代碼如下所示:node.js寫入http響應流

var writeStream = fs.createWriteStream(fileName); 
request(url, function(err, res) { 
    res.socket.pipe(writeStream); 
}); 

現在輸出文件已創建,但文件大小爲0. url正確,但我通過wget進行了驗證。

預先感謝&問候

回答

18

http.request回調僅供一個參數,它是對所述請求的response的參考。嘗試

http.request(url, function(res) { 
    res.pipe(writeStream); 
}); 

還要注意的是ClientResponse實現ReadableStream,所以你應該使用.pipe而非.socket.pipe

6

我假設request來自mikeal的請求庫,而不是http.request的實例。在這種情況下,您可以簡單地執行request(url).pipe(writeStream);

請記住,出於調試目的,您可以始終管道到process.stdout

+0

感謝。超級有用的提示在標準輸出 – 2017-07-18 15:31:06

3

var writeStream = fs.createReadStream(fileName); 
 
request(url, function(err, res) { 
 
    writeStream.pipe(res); 
 
    writeStream.on('end', function() { 
 
    //res.end({"status":"Completed"}); 
 
    }); 
 
});

+2

你只能將可讀的管道寫入可寫,而不是像你所建議的那樣。 – Salketer 2016-11-23 11:15:00