Javascript 解压错误[错误:无效签名:0xff000001]
Im使用以下库进行节点解压缩 我使用的代码是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) {
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);
})