#javascript #node.js #node-archiver #archiverjs
Вопрос:
Я написал ниже, чтобы сжать каталог :
const archiver = require('archiver');
let createArchive = function(sourceDir, destDir) {
const archive = archiver('zip');
const stream = fs.createWriteStream(destDir);
return new Promise((resolve, reject) => {
archive
.directory(sourceDir, false)
.on('error', err => reject(err))
.pipe(stream)
;
stream.on('close', () => resolve());
archive.finalize();
});
}
Перед тем, как застегнуть мой каталог, он выглядел так :
- excelArchive.zip
- test.txt
- test2.gz
Когда я распаковал архив (называемый yayy.zip
), в нем были эти файлы:
- excelArchive.zip
- test.txt
- test2.gz
- yayy.zip
Внутри него находится недопустимый файл с именем yayy.zip
. Как я могу этого избежать?
Ответ №1:
Вместо directory
этого вы можете использовать glob
метод , чтобы указать файлы для архивирования. Требуется второй аргумент, в котором вы можете указать файлы, которые следует игнорировать.
const archiver = require('archiver');
let createArchive = function(sourceDir, destDir) {
const archive = archiver('zip');
const stream = fs.createWriteStream(destDir);
return new Promise((resolve, reject) => {
archive
.on('error', err => reject(err))
.pipe(stream)
.glob(
'**/*',
{cwd: sourceDir, ignore: filename}
)
;
stream.on('close', () => resolve());
archive.finalize();
});
}
Комментарии:
1. Что такое имя файла здесь, я думаю, я хочу избежать yayy.zip которого раньше не существовало. Он был создан по умолчанию в zip-файле, поэтому файл param не будет работать ( так как его не существует на момент создания ). Также вы можете помочь мне понять, и почему это произошло в первую очередь.
2. Очевидно, что это имя файла, которое вы не хотите включать в zip-файл. т. е. имя самого zip-файла.