Node Archiver «Ошибка заголовков» при разархивировании больших файлов (более 4 ГБ) - PullRequest
0 голосов
/ 11 марта 2019

Я получаю ошибку заголовков при загрузке файлов размером более 4 ГБ, с параметром 'forceZip64' или без него.Zip создается на ходу при потоковой передаче содержимого каждого файла по одному.

Как создается zip-файл

// create zip archive
const zip = Archiver.create('zip', {
    store: true
    // forceZip64: contentLength > 4 * 1024 * 1024 * 1024
});
// pipe zip to response
zip.pipe(response);

// iterate targets download
for (const files of file) {
   const stream = await this.downloadFile(file.source); // returns Readable
   zip.append(stream, { name: file.source.filename });

   // await to download files one by one.
   await new Promise((resolve, reject) => {
      // handle success
      stream.on('end', () => {
          resolve();
      });
      // handle error
      stream.on('error', (err) => {
          reject();
      });
   });
}

// finalize zip streaming
zip.finalize();

Как распаковывается zip-файл

Использование 7ZIP Ubuntu

  • Например, когда я загружаю файл размером более 4 ГБ, а затем пытаюсь распаковать его, используя 7zip, я получаю следующий вывод:
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-7700T CPU @ 2.90GHz (906E9),ASM,AES-NI)

Scanning the drive for archives:
1 file, 15587398396 bytes (15 GiB)

Extracting archive: files.zip

ERRORS:
Headers Error

--
Path = files.zip
Type = zip
ERRORS:
Headers Error
Physical Size = 15587398396
64-bit = +

Использование Unzip Mac Os & Ubuntu (UnZip 6.00 от 20 апреля 2009 г.)

  • Я не получу никакой ошибки

АрхивУтилита Mac Os

  • "Невозможно развернуть 'files.zip' в 'Downloads'."
  • "(Ошибка 2 - нет такого файла или каталога)"

Результаты

Разархивировать Программа всегда работает, 7ZIP жалуется на заголовки, но, наконец, она хорошо разархивируется и Утилита архивирования (Mac Os default) не может разархивировать файл.

Во всех случаях контрольная сумма MD5 совпадает с исходной.

Кто-нибудь сталкивался с подобными проблемами сh файлы размером более 4 ГБ (2 ^ 32B)?

Все, что я сделал с zip-файлами размером менее 4 ГБ, успешно и без каких-либо ошибок или предупреждений.

...