2012-08-10 147 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