Создание zip-файла из объекта JSON с использованием adm-zip

Я пытаюсь создать .zip файл из объекта JSON в Node.js. Я использую adm-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')); 
});

Возвращается Cannot read property 'toString' of undefined на линии с console.log,

Я мог бы использовать zip.writeZip() для этого примера, но я отправляю .zipфайл в Amazon S3, поэтому мне нужно использовать метод .toBuffer() сделать что-то подобное после использования adm-zip:

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

Я не вижу, что не так, правильно ли я использую пакет?

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')); 
});
Другие вопросы по тегам