Javascript 如何从节点中的客户端提取zip

Javascript 如何从节点中的客户端提取zip,javascript,node.js,express,unzip,postman,Javascript,Node.js,Express,Unzip,Postman,我有一个节点应用程序,需要从客户端Postman获取一些zip文件,并将其解压缩到文件系统中的一个文件夹中,我使用express我做了以下不起作用的操作 我错过了什么 我创建了示例节点应用程序来模拟问题 var express = require('express'); var upload = require('multer')({ dest: 'uploads/' }); var admZip = require('adm-zip'); var app = express(); app.p

我有一个节点应用程序,需要从客户端Postman获取一些zip文件,并将其解压缩到文件系统中的一个文件夹中,我使用express我做了以下不起作用的操作

我错过了什么

我创建了示例节点应用程序来模拟问题

var express = require('express');
var upload = require('multer')({ dest: 'uploads/' });
var admZip = require('adm-zip');
var app = express();

app.post('/',upload.single('file'),function(req,res){
    debugger;
    var zip = new admZip(req.file);
    zip.extractAllTo("C://TestFolder//TestPathtoExtract", true);
    res.send("unzip");

});

var server = app.listen(3001,function(){
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s',host,port);
})
这就是我使用它的方式,我是邮递员

如果有其他方法可以使用不同的开源软件来实现这一点,那就太棒了! 我用

可以更改为任何其他库

我也找到了这个库,但不知道如何将它与express一起使用


谢谢

您需要将文件名作为参数传递

使用
req.file.path

  var zip = new admZip(req.file.path);

这是我为
邮递员
所做的设置,首先这是我的
表单数据
正文

在尝试手动设置
multipart/form data
后,我将标题留空,但完全失败,因此这里没有标题

这里我做了一对
console.log
,一个
req.header
,以确保
Postman
发送正确的
多部分/表单数据
,另一个
req.file

而且输出似乎很好

编辑:代码

var express = require('express');
var upload = require('multer')({
  dest: 'uploads/'
});
var admZip = require('adm-zip');
var app = express();

app.post('/', upload.single('file'), function(req, res) {
  console.log('%c > req.headers test.js [9] <=================================', 'color:blue;', req.headers);
  debugger;
  console.log('%c > req.file test.js [10] <=================================', 'color:blue;', req.file);
  //instead of just req.file I use req.file.path as admzip needs the actual file path
  var zip = new admZip(req.file.path);
  zip.extractAllTo("/Users/myuser/Desktop/ext", true);
  res.send("unzip");

});

var server = app.listen(3001, function() {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Example app listening at http://%s:%s', host, port);
});
var express=require('express');
var upload=require('multer')({
dest:'上传/'
});
var admZip=require('adm-zip');
var-app=express();
app.post('/',upload.single('file'),函数(req,res){

console.log(“%c>req.headers test.js[9]req.file test.js[10]您的代码有什么问题?@Michelem-它不工作,我没有在req(express)中获取文件它没有保存,任何想法或其他解决方案可以帮助吗?@Michelem-你可以测试我的代码,就像创建服务器js,粘贴conde,运行它,使用postman发送zip文件一样。你的意思是我的情况应该是req.test2.zip吗?只需粘贴上面的代码,如果你有错误,请给我显示console.log(req.file)的日志;使用console.log(req.file);我没有定义您可以按原样测试我的代码,只需创建server.js将代码放入并运行它,然后使用postman发送zipfile@JohnJerrby不应该是
req.files.yourforminputfilename
?或者只是
console.log(req.files)
然后看看你的文件是否在那里。顺便说一句,你以前没有问过这个问题吗?问题已经被删除了。编辑:但是well upload single应该做一些技巧,感谢支持!两件事1.你看到你提供的zip文件被解压缩到你的c文件夹中了吗?2.代码是否与我在问题中提供的代码完全相同n?3.你在windows上工作吗(我问它,因为我需要一些提示。这很奇怪,为什么它不适合我)0.不客气!:)1.确实文件被提取了2.我刚刚更改了@HireS.指出的
req.file.path
(以及提取路径,因为我没有运行windows)3.不是真的,我使用的是OSXCan,你也可以发布你的代码吗?你能解释一下为什么你要更改“我刚刚更改了@HireS.pointed的req.file.path”谢谢!