2015-06-15 26 views
0

我的程序的逻辑如下文件大小的不足:从AWS的NodeJS - 上的NodeJS归档和fs的统计

  1. 获取对象s3的
  2. 拉链从S3获得的所有对象(我创建一个zip文件名为a.zip)
  3. 放z.aip文件到S3

现在我面临的一个问题,我的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

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

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