【问题标题】:Extract zip file to local folder将 zip 文件解压缩到本地文件夹
【发布时间】:2015-12-08 06:17:34
【问题描述】:

我有带有 express 的节点应用程序,我从邮递员等客户端发送请求,我需要从 req 获取文件并将其提取到我的本地文件夹中,我该怎么做?

我找到了以下开源但不知道如何获取 req body 并将其解压缩到我的本地文件夹中,例如“C://Test//extractDest”,

以下代码取自以下开源代码,但如果有其他好的开源代码,我可以改用它 https://www.npmjs.com/package/decompress-zip

var DecompressZip = require('decompress-zip');
var unzipper = new DecompressZip(filename)

unzipper.on('error', function (err) {
    console.log('Caught an error');
});

unzipper.on('extract', function (log) {
    console.log('Finished extracting');
});

unzipper.on('progress', function (fileIndex, fileCount) {
    console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount);
});

unzipper.extract({
    path: "C://Test//extractDest",
    filter: function (file) {
        return file.type !== "SymbolicLink";
    }
});

这就是我发送 zip 文件的方式,我只需选择 binary 并选择 zip 文件

【问题讨论】:

  • @vinayr - 谢谢,但是我应该如何将它与 express 一起使用?
  • 您有兴趣使用基于网络的解压缩吗?像云转换 api 之类的东西,它将比许多基于 javascript 的解压缩模块具有更多功能

标签: javascript node.js express zip unzip


【解决方案1】:

我建议您使用 multer,它适用于 multipart/form-data 内容类型。

这是一个基本的工作示例。它假设我们只上传一个文件,一个名为“uploads”的文件夹存在于您的项目的根目录中,一个名为“singleFileUpload”的表单字段用于保存您的数据。 multer documentation后面的都可以改:

var path     = require("path");
var express  = require("express");
var multer   = require("multer");
var Unzipper = require("decompress-zip");


var app = express();

app.use(multer({dest:'./uploads/'}).single('singleFileUpload'));


app.post("/", function(req, res){

    if (req.file){

        var filepath = path.join(req.file.destination, req.file.filename);
        var unzipper = new Unzipper(filepath);

        unzipper.on("extract", function () {
            console.log("Finished extracting");
        });

        unzipper.extract({ path: "C://Test//extractDest"});
    }

    res.status(204).end();
});


app.listen(3000);

使用邮递员,您现在可以通过此配置上传和解压缩文件:

【讨论】:

  • 谢谢 1+ 只是一个澄清我们需要路径的原因是什么 var filepath = path.join(req.file.destination, req.file.filename);?
  • 当然。 req.file.destination 是上传文件的文件夹路径(在您的情况下为 ./uploads/),而 req.file.filename 是文件的名称(multer 为您生成名称)。您需要将两者结合起来进行 decompress-zip 才能知道要解压缩的文件所在的位置。
【解决方案2】:

您可以使用 multer 和 uzip2 来做到这一点。

有关一些信息,我的应用程序结构如下所示:

//App path --> C:\xampp\htdocs\service

service\
    |
    -- tmp\
    |
    -- app.js
    |
    -- index.html

这是我的代码:

var express = require("express");
var fs = require("fs");
var unzip = require("unzip2"); //module for extracting files
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:\\Test\\extractDest'}));
    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);
})

输出:

【讨论】:

    猜你喜欢
    • 2021-05-16
    • 2018-10-21
    • 2015-04-05
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多