Unzip error [Ошибка: недопустимая подпись: 0xff000001]

Im, используя следующую библиотеку для node unzip https://github.com/EvanOxfeld/node-unzip

Код, который я использую,

var extractor = unzip.Extract({
                path: 'C://TestFolder//TestZip'
            }).on('close', function () {
              console.log("Success to unzip");
            }).on('error', function (err) {
                console.log("error to unzip", err);
            });
            req.pipe(extractor);

Проблема в том, что в каком-то zip файле Im получается ошибка (в других ее работы отлично) [Ошибка: недопустимая подпись: 0x8080014] [Ошибка: недопустимая подпись: 0x83870008] ....

Эта ошибка не дает много информации... поиск в Интернете Я нашел это https://github.com/EvanOxfeld/node-unzip/issues/41

И установите и потребуйте пакет unzip2 вместо разархивирования, проблема теперь в том, что Im получает следующую ошибку unzip Ошибка: недопустимая подпись: 0xff000001

Я использую тот же код для unzip и unzip2 (который я представил в вышеприведенном сообщении), мне нужно использовать его другим? любые подсказки, как его решить?

ОБНОВЛЕНИЕ

Я отправляю zip файл из почтальона следующим образом введите описание изображения здесь

Ответ 1

Вы можете временно сохранить ZIP файл на своем диске, а затем извлечь его с помощью adm-zip.

Вот пример кода:


Клиентская сторона:

<form action="/upload" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

Сторона сервера

С помощью multer сохранить загруженный файл и adm-zip, чтобы извлечь его. Вам необходимо установить оба:

npm install --save multer
npm install --save adm-zip

После установки здесь пример их использования:

var multer=require('multer')   // a module for saving file from form.
var AdmZip = require('adm-zip'); // a module for extracting files
var express=require('express')  // module for receving HTTP traffic
var app=express()

var upload = multer({ dest: 'uploads/' })

app.post('/upload',upload.single('fileToUpload'),function(req,res){
   console.log('The file uploaded to:' + req.file.path)
   var zip = new AdmZip(req.file.path); 
   zip.extractAllTo( "/detination_folder/");
})

Информация о модулях, которые я использовал:

https://github.com/expressjs/multer, https://github.com/cthackers/adm-zip

Ответ 2

Node -unzip2 исправляет эту проблему.

пример:

var readStream = fs.createReadStream('path/to/archive.zip');
var writeStream = fstream.Writer('output/path');

readStream
  .pipe(unzip.Parse())
  .pipe(writeStream)

Ответ 3

Попробуйте свое решение для распаковки, но для получения двоичных данных прикрепите это промежуточное программное обеспечение, а затем получите файл с req.rawBody:

app.use(function(req, res, next) {
  var data = new Buffer('');
  req.on('data', function(chunk) {
      data = Buffer.concat([data, chunk]);
  });
  req.on('end', function() {
    req.rawBody = data;
    next();
  });
});

Ответ 4

Как сказала @Amina.

Вы можете временно сохранить ZIP файл на своем диске, а затем извлечь его

используя любой unzipper package like unzip,adm-zip,unzip2,unzippy или все, что вам нравится.

Для получения некоторой информации структура моего приложения, как показано ниже:

//App path --> C:\xampp\htdocs\service

service\
    |
    -- tmp\
    |
    -- app.js
    |
    -- index.html

Вы используете unzip2 правильно? Здесь мой код:

Сторона сервера:

Я использую unzip2 для извлечения zipFile, вы можете протестировать его, используя почтальон. Не забудьте использовать enctype="multipart/form-data" при его публикации.: D

var express = require("express");
var fs = require("fs");
var unzip = require("unzip2");
var app = express();

var multer = require("multer");
var multer_dest = multer({dest: "./tmp"}).single('zipFile');

app.post("/upload_zip",multer_dest,function(req,res){
    console.log(req.file);      
    fs.createReadStream(req.file.path).pipe(unzip.Extract({path: 'C:\\TestFolder\\TestZip'}));
    result = {
        file:req.file,
        message:"File has been extracted"
    };
    fs.unlink(req.file.path, function (e) {
        if (e) throw e;
        console.log('successfully deleted '+req.file.path);
    });
    res.end(JSON.stringify(result));
});

var server = app.listen(8081,function(){
    var host = server.address().address;
    var port = server.address().port;

    console.log("Example App Listening at http://%s:%s",host,port);
})

Выход: Выход из почтового оператора