узел-архиватор : Получение дубликата родительского почтового индекса при извлечении

#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-файла.