我正在尝试使用archiver归档文件夹,我要归档的文件夹路径如下所示:
tmp
|
folderToArchive
│file1.txt
│file2.txt
│file3.txt
将在其中生成zip文件的服务器端代码如下:
var archiver = require("archiver");
app.get("/download/:folder", (req, res) => {
var FolderName = req.params.folder;
var zipName = FolderName + ".zip";
var source = path.join(__dirname, "tmp", FolderName);
var out = path.join(__dirname, "tmp", zipName);
const archive = archiver('zip', { zlib: { level: 9 }});
const stream = fs.createWriteStream(out);
return new Promise((resolve, reject) => {
archive
.directory(source, false)
.on('error', err => reject(err))
.pipe(stream)
;
stream.on('close', () => resolve());
archive.finalize();
console.log("zip file created");
});
});
问题是,当我运行该应用程序时,它将在正确的目标位置创建一个空的zip文件。
这对我来说是全新的,我想了解为什么zip文件为空?
问候
var source = path.join(__dirname, "tmp", FolderName);
var out = path.join(__dirname, "tmp", zipName);
路径相对于正在运行的.js文件。为了
/tmp/folderToArchive/*.text
或
tmp
|
folderToArchive
│file1.txt
│file2.txt
│file3.txt
您需要将其更改为:
var source = path.join("/tmp", FolderName);
var out = path.join("/tmp", zipName);
此外,也不需要承诺:
app.get("/download/:folder", (req, res) => {
var FolderName = req.params.folder;
var zipName = FolderName + ".zip";
var source = path.join("/tmp", FolderName);
var out = path.join("/tmp", zipName);
const archive = archiver('zip', { zlib: { level: 9 }});
const stream = fs.createWriteStream(out);
archive
.directory(source, false)
.on('error', err => {throw err;})
.pipe(stream);
stream.on('close', () => console.log("closed"));
archive.finalize();
console.log("zip file created");
});