20

我正在通过 http 获取一些二进制数据。我的代码如下所示:

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

现在输出文件已创建,但文件大小为 0。不过,url 是正确的,我用 wget 验证了这一点。

提前致谢并致以最诚挚的问候

4

3 回答 3

24

回调http.request只提供一个参数,它是对请求响应的引用。尝试

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

还要注意ClientResponse工具ReadableStream,所以你应该使用.pipe而不是.socket.pipe

于 2012-08-10T17:18:55.910 回答
6

我假设这里request来自 mikeal 的请求库,而不是http.request. 在这种情况下,你可以简单地做request(url).pipe(writeStream);

请记住,出于调试目的,您始终可以通过管道传输到process.stdout.

于 2012-08-10T18:27:48.380 回答
2

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

于 2014-11-10T06:37:27.870 回答