将 zip 文件解压缩到本地文件夹
Extract zip file to local folder
我有带有 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 文件的方式 我只是 select binary 并选择 zip 文件
我建议您使用 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);
使用邮递员,您现在可以使用此配置上传和解压缩文件:
您可以使用 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);
})
输出:
我有带有 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 文件的方式 我只是 select binary 并选择 zip 文件
我建议您使用 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);
使用邮递员,您现在可以使用此配置上传和解压缩文件:
您可以使用 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);
})
输出: