使用node.js,我想按顺序处理一个大型tarball,寻找一个特定的文件。一旦遇到,我想保存文件,然后停止处理tarball的其余部分。这将导致更快的响应,因为我不必等待整个文件被处理。
我有一些代码,使用流'tar'包在node.js存储库中,如下所示:
fs.createReadStream('mytarball.tar.gz')
.on('error', console.log)
.pipe(zlib.Unzip())
.pipe(tar.Parse())
.on('entry', function(entry) {
if(entry.path == 'myfile') {
console.log('found myfile');
// save file
entry.pipe(fs.createWriteStream(entry.path));
//
// HELP - how do I stop processing the rest of the tarball (gracefully)
//
}
});
最好的办法可能是在文件流上简单地调用close()
:
var fstream = fs.createReadStream('mytarball.tar.gz')
.on('error', console.log);
fstream
.pipe(zlib.Unzip())
.pipe(tar.Parse())
.on('entry', function(entry) {
if(entry.path == 'myfile') {
console.log('found myfile');
// save file
entry.on('end', function() {
fstream.close();
}).pipe(fs.createWriteStream(entry.path));
}
});