解压缩错误
我使用下面的库解压缩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); })
输出: