解压缩错误

我使用下面的库解压缩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); 

问题在一些压缩文件我得到错误(在其他工作正常)[错误:无效签名:0x8080014] [错误:无效签名:0x83870008] ….

这个错误不会给很多信息…searchnetworking我发现这个https://github.com/EvanOxfeld/node-unzip/issues/41

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

我使用相同的代码unzip和unzip2(我在上面的post中提供),我需要使用它不同? 任何提示如何解决?

UPDATE

我发送邮递员的zip文件如下 在这里输入图像描述

您可以临时将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

Node-unzip2修补这个问题。

例如:

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

尝试你的解压缩解决scheme,但是为了接收二进制数据,附加这个中间件,然后从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(); }); }); 

正如@Amina所说。

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

使用任何unzipper package like unzip,adm-zip,unzip2,unzippy或任何你喜欢的东西。

对于一些信息,我的应用程序结构如下所示:

 //App path --> C:\xampp\htdocs\service service\ | -- tmp\ | -- app.js | -- index.html 

你正在使用unzip2吗? 这是我的代码:

服务器端:

我使用unzip2来提取zip文件,你也可以用邮递员来testing它。 不要忘了在发布时使用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); }) 

输出: 邮递员输出