Adm Zip архивирование файлов в качестве каталогов

Я пытаюсь упаковать файлы в zip-файл с помощью Adm-Zip

var AdmZip = require('adm-zip');

var pathToZip = 'build/release/Ext.zip';


var zip = new AdmZip();

zip.addLocalFile('background.js');
zip.addLocalFile('chrome_ex_oauth.html');
zip.addLocalFolder('images');
zip.writeZip(pathToZip);

Тем не менее, все файлы добавляются в виде папок внутри zip, а фактическое содержимое не архивируется.

Скриншот

Ниже приведена ссылка "Приступая к работе", и это очень простой пример, который работает не так, как ожидалось. Что я делаю неправильно? https://github.com/cthackers/adm-zip/wiki/ADM-ZIP-Introduction

3 ответа

Решение

Поэтому я немного покопался: https://github.com/cthackers/adm-zip/blob/master/adm-zip.js#L275

addFile в конечном счете вызывается addLocalFile, и, похоже, именно здесь происходит ошибка, особенно в строке 281, где она проверяет, является ли ZipEntry каталогом. Неправильные флаги применяются.

Чтобы обойти это, я в итоге вызвал addFile вручную и сам определил атрибуты, чтобы он не зависел от автоопределения и неправильно помечал файлы как каталоги.

addFile(filePathInArchive, fileBuffer, '', 0644 << 16);

Чтобы получить файл Buffer самостоятельно, вы можете использовать fs.readFile или fs.readFileSync

var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");

Из вики adm-zip:

[void] addLocalFile (String localPath, String zipPath)

Добавляет файл с диска в архив.

[void] addLocalFolder (String localPath, String zipPath)

Добавляет локальный каталог и все его вложенные файлы и каталоги в архив

Похоже, вы пропустили второй параметр - zipPath.

Другие вопросы по тегам