我正在使用以下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