我正在使用以下node.js代码从某个url下载文件并将其保存在磁盘中。 我想知道下载文档的时间。我还没有看到任何回调pipe.Or,是否有任何'结束'事件可以完成下载捕获?回调来处理管道的完成
request(some_url_doc).pipe(fs.createWriteStream('xyz.doc'));
我正在使用以下node.js代码从某个url下载文件并将其保存在磁盘中。 我想知道下载文档的时间。我还没有看到任何回调pipe.Or,是否有任何'结束'事件可以完成下载捕获?回调来处理管道的完成
request(some_url_doc).pipe(fs.createWriteStream('xyz.doc'));
流是EventEmitter
所以你可以听某些事件。正如你所说,有一个finish
事件请求(以前的end
)。
var stream = request(...).pipe(...);
stream.on('finish', function() { ... });
有关哪些事件可用的更多信息,您可以检查stream documentation page。
基于nodejs文件,http://nodejs.org/api/stream.html#stream_event_finish, 它应该处理writableStream的finish
事件。
var writable = getWriteable();
var readable = getReadable();
readable.pipe(writable);
writable.on('finish', function(){ ... });
接受的答案对节点v0.12.7不适用,但您的解决方案确实如此。 – 2015-08-30 14:13:00
将内容从管道通过http传输到文件系统的代码片段。作为@starbeamrainbowlabs注意到事件finish
做工作
var tmpFile = "/tmp/somefilename.doc";
var ws = fs.createWriteStream(tmpFile);
ws.on('finish', function() {
// pipe done here, do something with file
});
var client = url.slice(0, 5) === 'https' ? https : http;
client.get(url, function(response) {
return response.pipe(ws);
});
,我发现我的问题,关于这方面的有点不同的解决方案。思想值得分享。
大部分示例都从文件创建readStreams
。但在我的情况下,readStream
必须由来自消息池的JSON
字符串创建。
var jsonStream = through2.obj(function(chunk, encoding, callback) {
this.push(JSON.stringify(chunk, null, 4) + '\n');
callback();
});
// message.vale --> valeu/text to write in write.txt
jsonStream.write(JSON.parse(message.value));
var writeStream = sftp.createWriteStream("/path/to/write/write.txt");
//"close" event didn't work for me!
writeStream.on('close', function() {
console.log("- done!");
sftp.end();
}
);
//"finish" event didn't work for me either!
writeStream.on('close', function() {
console.log("- done!"
sftp.end();
}
);
// finally this worked for me!
jsonStream.on('data', function(data) {
var toString = Object.prototype.toString.call(data);
console.log('type of data:', toString);
console.log("- file transferred");
});
jsonStream.pipe(writeStream);
而不是听完“完成”你有两个处理“关闭”,也许这就是原因。 “完成”事件适用于我。 – jowo 2017-05-24 15:37:42
下面是在处理请求的错误,并调用文件被写入后回调的解决方案:
request(opts)
.on('error', function(err){ return callback(err)})
.pipe(fs.createWriteStream(filename))
.on('finish', function (err) {
return callback(err);
});
'变种R =请求(...)上(“结束”,函数( ){/ * CALLBACK * /})。pipe(...);' – 2013-08-31 21:43:17
对我来说事件'close',而不是'end'works'r.on('close'),function(){... })' – Judson 2013-12-16 20:20:09
'结束'事件现在'结束' 管道事件:http://nodejs.org/api/stream.html#stream_event_finish – 2014-04-16 14:44:58