Nodejs - nodejs archiver和fs stat上的文件大小不足

时间:2015-06-15 07:42:36

标签: node.js amazon-web-services amazon-s3

我的程序的逻辑如下:

  1. 从aws s3获取对象
  2. 压缩从s3获得的所有对象(我创建一个名为a.zip的zip文件)
  3. 将z.aip文件放入s3
  4. 现在我遇到一个问题,我的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);    
          }); 
       });
    })
    

1 个答案:

答案 0 :(得分:0)

我通过在createWriteStream的close事件中检查文件大小而不使用归档的结束事件来解决问题。因为在归档的最后事件中,writeFileStream没有完成。

var out = fs.createWriteStream('Archive.zip');
out.on('close', function() {
    // check file size here ...
});