unzip error [Error: invalid signature: 0xff000001]
unzip error [Error: invalid signature: 0xff000001]
我正在使用以下库进行节点解压缩
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 文件中收到错误的问题(在其他文件中它工作正常)
[错误:无效签名:0x8080014]
[错误:无效签名:0x83870008]
....
这个错误没有提供很多信息...
在网上搜索我发现了这个
https://github.com/EvanOxfeld/node-unzip/issues/41
并安装并需要 unzip2 包而不是 unzip ,
现在我收到以下错误的问题
解压错误:签名无效:0xff000001
我对 unzip 和 unzip2 使用相同的代码(我在上面的 post 中提供),我需要使用不同的代码吗?任何提示如何解决?
更新
我从 postman 发送 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
尝试您的解压缩解决方案,但要接收二进制数据,请附加此中间件,然后从 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();
});
});
Node-unzip2 修补了这个问题。
示例:
var readStream = fs.createReadStream('path/to/archive.zip');
var writeStream = fstream.Writer('output/path');
readStream
.pipe(unzip.Parse())
.pipe(writeStream)
正如@Amina 所说。
You can temporary save the ZIP file on your disk, and then extract it
使用任何 unzipper package like unzip,adm-zip,unzip2,unzippy
或您喜欢的任何东西。
有关一些信息,我的应用程序结构如下所示:
//App path --> C:\xampp\htdocs\service
service\
|
-- tmp\
|
-- app.js
|
-- index.html
您使用的是 unzip2 吗?
这是我的代码:
服务器端:
我正在使用 unzip2
解压缩 zipFile,您也可以使用 postman 对其进行测试。不要忘记在 post 时使用 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);
})
输出:
我正在使用以下库进行节点解压缩 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 文件中收到错误的问题(在其他文件中它工作正常) [错误:无效签名:0x8080014] [错误:无效签名:0x83870008] ....
这个错误没有提供很多信息... 在网上搜索我发现了这个 https://github.com/EvanOxfeld/node-unzip/issues/41
并安装并需要 unzip2 包而不是 unzip , 现在我收到以下错误的问题 解压错误:签名无效:0xff000001
我对 unzip 和 unzip2 使用相同的代码(我在上面的 post 中提供),我需要使用不同的代码吗?任何提示如何解决?
更新
我从 postman 发送 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
尝试您的解压缩解决方案,但要接收二进制数据,请附加此中间件,然后从 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();
});
});
Node-unzip2 修补了这个问题。
示例:
var readStream = fs.createReadStream('path/to/archive.zip');
var writeStream = fstream.Writer('output/path');
readStream
.pipe(unzip.Parse())
.pipe(writeStream)
正如@Amina 所说。
You can temporary save the ZIP file on your disk, and then extract it
使用任何 unzipper package like unzip,adm-zip,unzip2,unzippy
或您喜欢的任何东西。
有关一些信息,我的应用程序结构如下所示:
//App path --> C:\xampp\htdocs\service
service\
|
-- tmp\
|
-- app.js
|
-- index.html
您使用的是 unzip2 吗? 这是我的代码:
服务器端:
我正在使用 unzip2
解压缩 zipFile,您也可以使用 postman 对其进行测试。不要忘记在 post 时使用 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);
})
输出: