Javascript 解压错误[错误:无效签名:0xff000001]

Javascript 解压错误[错误:无效签名:0xff000001],javascript,node.js,unzip,Javascript,Node.js,Unzip,Im使用以下库进行节点解压缩 我使用的代码是 var extractor = unzip.Extract({ path: 'C://TestFolder//TestZip' }).on('close', function () { console.log("Success to unzip"); }).on('error', function (err) {

Im使用以下库进行节点解压缩

我使用的代码是

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文件中,我得到了错误(在其他zip文件中,它可以正常工作) [错误:无效签名:0x8080014] [错误:无效签名:0x83870008]

这个错误没有提供很多信息。。。 在网上搜索我找到了这个

安装并要求解压2包,而不是解压, 现在的问题是,我得到了以下错误 解压缩错误:无效签名:0xff000001

我对解压和解压2使用相同的代码(我在上面的帖子中提供),我需要使用不同的代码吗?有什么解决办法吗

更新

我从邮递员那里发送zip文件,如下所示

您可以将ZIP文件临时保存在磁盘上,然后使用
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/");
})
有关我使用的模块的信息:


尝试解压解决方案,但要接收二进制数据,请连接此中间件,然后从
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();
  });
});
解决这个问题

例如:

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

readStream
  .pipe(unzip.Parse())
  .pipe(writeStream)
正如阿米娜所说


您可以将ZIP文件临时保存在磁盘上,然后将其解压缩

使用任何
解压包,如unzip、adm-zip、unzip2、unzippy
或任何您喜欢的解压包

有关某些信息,我的应用程序结构如下所示:

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

service\
    |
    -- tmp\
    |
    -- app.js
    |
    -- index.html
你在用unzip2,对吗? 这是我的密码:

服务器端: 我正在使用
unzip2
提取zipFile,您也可以使用postman进行测试。发布时不要忘记使用
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);
})
输出:

是否只有一个zip出现此错误?对于这个特殊的zip,在创建zip之后,您是否添加了更多的文件?@abhinabasu-我使用了~5个zip文件,这些文件没有这个问题,并且工作正常。这个拉链有不同的内容,但使用的~5个拉链中有任何一个都有不同的内容……它能回答你的问题吗?我只有一个疑问。创建此特定zip后,您是否编辑了相同的内容,如添加/删除或更新内容?@abhinabasu-这是我从外部使用获得的zip文件上传zip,以便我们可以测试它。我们可以帮助解决这个问题,重新制作它…嗨,阿米娜,谢谢!Im使用express,文件来自req(我使用postman将zip文件作为二进制文件发送到正文),我应该如何传递它?在这里,您可以从(“./input_file.zip”)中读取它;这不是我的情况…谢谢,我添加了一个选项,可以直接从请求主体中读取文件,而不是从文件中读取。谢谢,但是文件没有被提取。我将我的c文件夹像这样放置到extractAllToAsync(“c://TestFolder//TestZip//test”,true,//覆盖或不覆盖函数回调(){})})我应该在回调中放入什么,提取的alltoasync是什么?我还尝试了var AdmZip=require('adm-zip');var zip=新的AdmZip(请求正文);extractAllTo(“C://TestFolder//TestZip//test”,true);这不管用。。。我在编写时使用bodyParser Hi Amina 1+提供支持:)请参阅我的更新帖子,我不使用multer,我使用postman模拟发送zip的客户端,当我尝试var zip=new AdmZip(req.body)时,我需要将其解压缩到我的c文件夹中;extractAllTo(“C://TestFolder//TestZip);没有发生任何事情,我也没有收到任何错误,我在这里遗漏了什么?(我尝试使用不同的ZIP和相同的结果,有什么建议吗?OP在原始问题中提到使用unzip2,这就是标题中的错误的来源,它对您有效吗?您能提供您使用的完整代码吗,我想测试它:)谢谢我尝试使用您的示例1。我应该将EncType=”放在哪里multipart/form data“我使用postman,请提供屏幕截图。2.我想将其保存在C驱动器上的本地文件夹('C://TestFolder//TestZip')中,我该怎么做?我正在使用windows…当我按原样使用您的程序时,我得到错误:makeError处出现意外字段(c:\Users\i026\WebstormProjects\extractFileDemo\node\u modules\multer\lib\make error.js:12:13)位于wrappedFileFilter(c:\Users\i06\WebstormProjects\extractFileDemo\node\u modules\multer\index.js:39:19)我也在使用windows。你的zipfile加密了吗?请提供你的应用程序结构,我会帮你检查。我已经更新了我的答案,将其解压缩到本地文件夹
C:\\TestFolder\\TestZip
,并在postman屏幕截图中提供一些信息。嗨,它对你有用吗?你能提供complte代码吗?以及你在postman中的内容谢谢
//App path --> C:\xampp\htdocs\service

service\
    |
    -- tmp\
    |
    -- app.js
    |
    -- index.html
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);
})