最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何在node js应用程序中压缩文件夹以及zip下载开始之后?

IT培训 admin 3浏览 0评论

如何在node js应用程序中压缩文件夹以及zip下载开始之后?

我尝试使用npm软件包adm-zip 0.4.4,因为最新的0.4.7不起作用,adm-zip 0.4.4在Windows上有效,但在Mac&Linux上则无效。另一个问题是,我只想压缩zip_folder,但它压缩了从folder_1开始的整个目录结构。这是代码:

var zip = new admZip();

zip.addLocalFolder("./folder_1/folder_2/folder_3/**zip_folder**");

zip.writeZip("./folder_1/folder_2/folder_3/download_folder/zip_folder.zip");

所有这些都发生在服务器端。我已经搜索了很多,并尝试了许多npm软件包来压缩文件夹或目录。有什么建议或其他解决我问题的好方法吗?

回答如下:

您也可以使用node-archiver,这在我使用时非常有用。首先,您需要create archiver的实例,如下所示:

var fs = require('fs');
var archiver = require('archiver');

var archive = archiver.create('zip', {});
var output = fs.createWriteStream(__dirname + '/zip_folder.zip');

以这种方式,您告诉archiver根据您所传递的格式压缩文件或文件夹。在这种情况下,它是zip。另外,我们创建一个writeStream,它将通过管道传递到archiver作为其输出。同样,我们使用directory方法以递归方式附加目录及其文件,并赋予dirpath

archive.pipe(output);

archive
  .directory(__dirname + '/folder_1/folder_2/folder_3/download_folder/zip_folder')
  .finalize();

[最后,我们需要finalize阻止进一步添加到存档结构的实例。

另一个选择是使用bulk方法,如下所示:

archive.bulk([{ 
  expand: true, cwd: './folder_1/folder_2/folder_3/download_folder/zip_folder/', 
  src: ['**/*'] 
}]).finalize();

更新1

[**/*] syntax的简要说明:这将递归包括所有文件夹**和文件*

如何在node js应用程序中压缩文件夹以及zip下载开始之后?

我尝试使用npm软件包adm-zip 0.4.4,因为最新的0.4.7不起作用,adm-zip 0.4.4在Windows上有效,但在Mac&Linux上则无效。另一个问题是,我只想压缩zip_folder,但它压缩了从folder_1开始的整个目录结构。这是代码:

var zip = new admZip();

zip.addLocalFolder("./folder_1/folder_2/folder_3/**zip_folder**");

zip.writeZip("./folder_1/folder_2/folder_3/download_folder/zip_folder.zip");

所有这些都发生在服务器端。我已经搜索了很多,并尝试了许多npm软件包来压缩文件夹或目录。有什么建议或其他解决我问题的好方法吗?

回答如下:

您也可以使用node-archiver,这在我使用时非常有用。首先,您需要create archiver的实例,如下所示:

var fs = require('fs');
var archiver = require('archiver');

var archive = archiver.create('zip', {});
var output = fs.createWriteStream(__dirname + '/zip_folder.zip');

以这种方式,您告诉archiver根据您所传递的格式压缩文件或文件夹。在这种情况下,它是zip。另外,我们创建一个writeStream,它将通过管道传递到archiver作为其输出。同样,我们使用directory方法以递归方式附加目录及其文件,并赋予dirpath

archive.pipe(output);

archive
  .directory(__dirname + '/folder_1/folder_2/folder_3/download_folder/zip_folder')
  .finalize();

[最后,我们需要finalize阻止进一步添加到存档结构的实例。

另一个选择是使用bulk方法,如下所示:

archive.bulk([{ 
  expand: true, cwd: './folder_1/folder_2/folder_3/download_folder/zip_folder/', 
  src: ['**/*'] 
}]).finalize();

更新1

[**/*] syntax的简要说明:这将递归包括所有文件夹**和文件*

发布评论

评论列表 (0)

  1. 暂无评论