2015-07-09 123 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,我不明白,因为这些函数是同步的。 –