我正在尝试使用以下方式存档文件夹archiver,我想要存档的文件夹的路径如下所示:
Project
| app.js
| 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 文件是空的?
Regards
这可能与我有一个空存档的原因相同,这是在存档写入 zip 之前结束的主要过程。
因此,它应该包含在一个承诺中,如下所示:
async function zipDirectory(source, dest) {
const stream = fs.createWriteStream(dest);
const archive = archiver('zip', { zlib: { level: 9 } });
archive.on('error', function(err) {
throw err;
});
await new Promise((resolve, reject) => {
archive.pipe(stream);
archive.directory(source, false);
archive.on('error', err => {throw err;});
archive.finalize();
stream
.on('close', function() {
console.log(`zipped ${archive.pointer()} total bytes.`);
resolve();
});
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)