【问题标题】:How to extract zip from client in node如何从节点中的客户端提取zip
【发布时间】:2016-03-06 17:50:10
【问题描述】:

我有一个节点应用程序,它需要从客户端 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);
})

这就是我邮递员的使用方式

如果有其他方法可以使用不同的开源,那就太好了! 我用 https://github.com/cthackers/adm-zip

可以更改为任何其他库

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

谢谢!

【问题讨论】:

  • 你的代码有什么问题?
  • @Michelem - 它不起作用我没有在 req (express) 中获取文件并且它没有保存,任何想法或其他解决方案可以提供帮助?
  • @Michelem - 您可以按原样测试我的代码,只需创建服务器 js 并粘贴 conde 并运行它并使用邮递员发送 zip 文件

标签: javascript node.js express unzip postman


【解决方案1】:

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

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

在这里我做了一对console.log,其中一个req.headers确保Postman发送正确的multipart/form-data和另一个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);
});

【讨论】:

  • 感谢 1+ 的支持!两件事1。您是否看到您提供的 zip 文件已提取到您的 c 文件夹中? 2.代码与我在问题中提供的代码完全相同吗? 3.你在 Windows 上工作吗(我问它是因为我需要一些提示,这很奇怪为什么它不适合我)
  • 0。不客气! :) 1. 确实文件被提取了 2. 我只是改变了@HireS 的内容。指出req.file.path(以及提取路径,因为我没有运行windows)3.不是真的,我使用的是OSX
  • 能否请您也发布您的代码?您能否详细说明为什么要更改“我刚刚更改了@HireS. 指出的 req.file.path”,谢谢!
【解决方案2】:

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

使用req.file.path

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

【讨论】:

  • 你的意思是我的情况应该是 req.test2.zip 吗?
  • 只需粘贴上面的代码,如果出现错误,请显示console.log(req.file)的日志;
  • 与console.log(req.file);我没有定义
  • 您可以按原样测试我的代码,只需创建 server.js 并将代码放入并运行它并使用邮递员发送 zip 文件
  • @JohnJerrby 不应该是req.files.yourforminputfilename?或者只是console.log(req.files),看看你的文件是否在那里。顺便说一句,你之前没有问过这个吗?这个问题被删除了。编辑:但是上传单曲应该可以解决问题
猜你喜欢
  • 2021-07-22
  • 2018-04-27
  • 2019-06-26
  • 1970-01-01
  • 2017-08-27
  • 2011-05-29
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
相关资源
最近更新 更多