Разархивировать файл не работает
Я использую следующий код из
https://github.com/cthackers/adm-zip/wiki/ADM-ZIP-Introduction
Мне нужно получить zip-файл из запроса (я использую экспресс, и у меня есть запрос и ответ), и мне нужно извлечь (разархивировать) его по некоторому пути (в примере для моего локального диска), куда я должен поместить и чего мне не хватает здесь, чтобы заставить его работать
fn: function (req, res) {
var admZip = require('adm-zip');
var zip = new admZip();
zip.addLocalFile("C://TestFolder//TestZip");
в теле запроса я получаю zip-файл (я использую почтальон, а в теле я использую бинарный файл и выбираю zip-файл)
2 ответа
Пожалуйста, попробуйте мой фрагмент кода:
Для некоторой информации структура My App выглядит следующим образом:
my path --> C:\xampp\htdocs\service
service
|
-- tmp\
|
-- app.js
|
-- index.html
Сторона клиента:
<html>
<body>
<h3>ZIP Upload:</h3>
<form action="/upload_zip" method="POST" enctype="multipart/form-data">
Select zip to upload:
<input type="file" name="zipFile" id="zipFile">
<input type="submit" value="Upload ZIP" name="submit">
</form>
</body>
</html>
Сторона сервера:
Не забудьте использовать enctype="multipart/form-data"
когда вы отправляете это используя почтальон или что-то в этом роде...
var express = require("express");
var fs = require("fs");
var AdmZip = require('adm-zip');
var app = express();
var multer = require("multer");
var multer_dest = multer({dest: "./tmp"}).single('zipFile');
app.get("/",function(req,res){
console.log("Show index.html");
res.sendFile(__dirname+"/"+"index.html");
});
app.post("/upload_zip",multer_dest,function(req,res){
console.log(req.file);
var zip = new AdmZip(req.file.path);
zip.extractAllTo("./tmp");
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);
})
Выход:
Вы можете упростить проблему, используя form-data
вместо binary
и используя multer. Вы можете получить входной файл, открыв req.file
после чего вы можете выполнить операцию распаковки.
Например, вы добавили бы к вашему маршруту:
var upload = require('multer')({ dest: 'uploads/' });
var admZip = require('adm-zip');
app.post('/upload-here', upload.single('file'), function (req, res, next) {
var zip = new admZip(req.file.path);
zip.extractAllTo("C://TestFolder//TestZip", true);
});