如何从节点

时间:2015-12-02 13:07:37

标签: javascript node.js express unzip postman

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

我在这里错过了什么?

我已经创建了示例节点应用来模拟问题。

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);
})

这就是我如何使用它的邮递员

enter image description here

如果还有其他方法可以使用不同的开源,这可能会很棒! 我用 https://github.com/cthackers/adm-zip

可以更改为任何其他库

我也找到了这个lib但不确定如何将它与 express 一起使用 https://www.npmjs.com/package/decompress-zip

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要传递filename作为参数。

使用req.file.path

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

答案 1 :(得分:1)

这是我为Postman所做的设置,首先是我的form-data正文

form

现在在标题中我在尝试手动设置multipart/form-data并完全失败后留空了,所以这里没有标题。

headers

我在这里做了一对console.log,其中一个是req.headers,以确保Postman发送权限multipart/form-data而另一个req.file

file

而且输出似乎很好

enter image description here

编辑代码。

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);
});