我的程序的逻辑如下:
现在我遇到一个问题,我的a.zip文件总是缺少几个字节。从以下代码片段中,console.log(archive.pointer())和console.log(stat.size)的结果将不同。有没有人有想法?谢谢。
async.map(filename, util.getS3Obj, function(err, result) {
var archiver = require('archiver');
var archive = archiver.create('zip', {});
archive.pipe(fs.createWriteStream('./tmp/Archive.zip'));
for(var i=0 ; i<result.length ; i++) {
archive.append(result[i], {name: fileNameArr[i]});
}
archive.finalize();
archive.on('end', function() {
console.log(archive.pointer());
fs.stat('./tmp/Archive.zip', function(err, stat) {
if(err) {}
console.log(stat.size);
});
});
})
答案 0 :(得分:0)
我通过在createWriteStream的close事件中检查文件大小而不使用归档的结束事件来解决问题。因为在归档的最后事件中,writeFileStream没有完成。
var out = fs.createWriteStream('Archive.zip');
out.on('close', function() {
// check file size here ...
});