如何在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
的简要说明:这将递归包括所有文件夹**
和文件*
。