node.js-使用存档器存档文件夹会生成一个空的zip

问题描述 投票:0回答:1

我正在尝试使用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文件为空?

问候

node.js express zip
1个回答
0
投票
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");

});
© www.soinside.com 2019 - 2024. All rights reserved.