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
Ответы
Ответ 1
Итак, я сделал рытье:
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
Ответ 2
var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");
Ответ 3
Из wiki adm-zip:
[void] addLocalFile (String localPath, String zipPath)
Добавляет файл с диска в архив.
[void] addLocalFolder (String localPath, String zipPath)
Добавляет локальный каталог и все его вложенные файлы и каталоги в архив
Как вам кажется, вы пропустите второй параметр, который является zipPath.