Ошибка при использовании unzip с размером файла 12 МБ

Im, используя следующий открытый исходный код для распаковки файла и его работу, как ожидается, на zip размером 2-5 МБ, но когда я поставил zip на 10 МБ, я получил ошибку, существует более стабильный открытый исходный код, который я могу использовать для больших zip файлов? Мне нужно, чтобы он находился под лицензией MIT.  это то, что я использовал https://github.com/EvanOxfeld/node-unzip

var extractor = unzip.Extract({ path: "../"});

extractor.on("close", function() {
    console.log("Success unzip");
});

extractor.on("close", function(err) {
    console.log(err);
});

req.pipe(extractor);

Ответ 1

в соответствии с этим выпуском страницы unzip github - https://github.com/EvanOxfeld/node-unzip/issues/73,

  • модуль unzip больше не поддерживается.
  • проблема, связанная с потоковой передачей от http, кажется, была решена в вилке, называемой unzip2 (также очень старой).

попробуйте

npm install unzip2

есть и другие модули MIT zip, которые вы можете попробовать:

вы также можете найти эту библиотеку - https://www.npmjs.com/package/yauzl, которая объясняет, почему формат файла "zip" не очень подходит для потоковой передачи.

https://www.npmjs.com/package/yauzl#no-streaming-unzip-api

Из-за дизайна формата файла .zip невозможно интерпретировать .zip файл от начала до конца (например, из читаемого поток), не жертвуя правильностью. Центральный справочник, который является полномочием по содержимому .zip файла, находится в конце .zip файл, а не начало. API потоковой передачи потребуется либо буферизировать весь .zip файл, чтобы добраться до Центрального каталога до интерпретация чего-либо (преодоление цели потоковой передачи интерфейс) или полагаться на локальные заголовки файлов, которые чередуются через .zip файл. Однако локальные заголовки файлов явно денонсированные в спецификации как ненадежные копии Центрального Directory, поэтому доверие к ним было бы нарушением спецификации.

Любая библиотека, которая предлагает потоковый unzip API, должна сделать одну из выше двух компромиссов, что делает библиотеку либо нечестной, либо несоответствующим (обычно последнему). Эта библиотека настаивает на правильность и приверженность спецификации, и поэтому не предлагает потокового API.

есть 354 результатов, чтобы "распаковать" на NPM - https://www.npmjs.com/search?q=unzip

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

Как только это сработает, вы сможете добавить дополнительную сложность веб-сервера.

Ответ 2

Я бы использовал CloudConvert api, у них есть npm, которые могут справиться с этим. код примера для него можно найти в своей документации конкретный пример node - это

var fs = require('fs'),
    cloudconvert = new (require('cloudconvert'))(''); // install using 'npm install cloudconvert'

fs.createReadStream('input.format').pipe(cloudconvert.convert({
"input": "upload"
}).on('error', function(err) {
    console.error('Failed: ' + err);
}).on('finished', function(data) {
    console.log('Done: ' + data.message);
    this.pipe(fs.createWriteStream('output.format'));
}).on('downloaded', function(destination) {
    console.log('Downloaded to: ' + destination.path);
}));

вам нужно подключение к Интернету, чтобы это работало. Что касается лицензии MIT, очевидно, это api не независимый код. Но функциональность и надежность этого будут больше, чем что-либо в локальной системе. И это бесплатно, если это ваше беспокойство по поводу лицензии MIT. Если вы хотите получить лицензию MIT, чтобы вы могли ее редактировать и манипулировать ею, это может не сработать.