node.js-使用存档程序存档文件夹会生成一个空的zip [英] node.js - Archiving folder using archiver generate an empty zip

查看:65
本文介绍了node.js-使用存档程序存档文件夹会生成一个空的zip的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 archiver 归档文件夹,该文件夹的路径是想要存档如下:

I am trying to archive a folder using archiver, the path of the folder that i'd like to archive look like this :

Project
| app.js
| tmp
    |
     folderToArchive
            │file1.txt 
            │file2.txt 
            │file3.txt 

将在其中生成zip文件的服务器端代码如下:

my server side code where the zip file will be generated look like this :

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文件.

The issue is when i run the app it will create an empty zip file in the right destination.

这对我来说是全新的,我想了解为什么zip文件为空?

This is totally new for me and I'd like to understand why the zip file is empty ?

致谢

推荐答案

这可能与我拥有一个空存档的原因相同,这是在存档写入zip之前结束的主要过程.

It could likely be the same reason that I had an empty archive, which is the main process ending before the archive get to write into zip.

因此,应将其包装在promise中,如下所示:

Hence it should be wrapped in a promise, something like this:

    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();
        });
  });
}

这篇关于node.js-使用存档程序存档文件夹会生成一个空的zip的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆