2015-07-09 103 views
0

我試圖從Node.js中的JSON對象創建.zip文件。我使用adm-zip to do that但是我無法使其與此代碼的工作:使用adm-zip從JSON對象創建zip文件

var admZip = require('adm-zip'); 
var zip = new admZip(); 
zip.addFile(Date.now() + '.json', new Buffer(JSON.stringify(jsonObject)); 
var willSendthis = zip.toBuffer(); 
fs.writeFileSync('./example.zip', willSendthis); 

此代碼創建example.zip,但我不能夠提取它,我試圖用一個.zip提取也與此代碼:

var admZip = require('adm-zip'); 
var zip = new admZip("./example.zip"); 
var zipEntries = zip.getEntries(); // an array of ZipEntry records 

zipEntries.forEach(function(zipEntry) { 
    console.log(zipEntry.data.toString('utf8')); 
}); 

它在與console.log行返回Cannot read property 'toString' of undefined

我可以用zip.writeZip()這個例子,但我發送.zip文件到Amazon S3因此,我需要使用方法.toBuffer()使用adm-zip後做這樣的事情:

var params = {Key: 'example.zip', Body: zip.toBuffer()}; 
s3bucket.upload(params, function(err, data) {...}); 

我不看看有什麼不對,我是否正確使用軟件包?

+0

您可以閱讀'example.zip' JSON文件寫入磁盤之後? – hassansin

回答

1

嘗試使用zipEntry.getData().toString('utf8')代替zipEntry.data.toString('utf8')

var admZip = require('adm-zip'); 
var zip = new admZip("./example.zip"); 
var zipEntries = zip.getEntries(); // an array of ZipEntry records 

zipEntries.forEach(function(zipEntry) { 
    console.log(zipEntry.getData().toString('utf8')); 
}); 
+0

它只返回已添加到zip的文件的2/3,我不明白,因爲這些函數是同步的。 –