2015-06-15 25 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 ... 
});