如何压缩节点js应用程序中的文件夹和邮编下载开始后?
我尝试使用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");
所有这些都发生在服务器端。 我search了很多,并尝试了很多npm包压缩文件夹或目录。 任何build议或任何其他好方法来解决我的问题?
您也可以使用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
。 此外,我们创build一个writeStream
,将其作为输出传递给archiver
。 我们还使用directory
方法来追加一个目录及其文件,
archive.pipe(output); archive .directory(__dirname + '/folder_1/folder_2/folder_3/download_folder/zip_folder') .finalize();
最后,我们需要finalize
阻止进一步附加到归档结构的实例。
另一种select是使用bulk
方法,如下所示:
archive.bulk([{ expand: true, cwd: './folder_1/folder_2/folder_3/download_folder/zip_folder/', src: ['**/*'] }]).finalize();
更新1
对[**/*] syntax
的一点解释:这将recursion地包含所有文件夹**
和文件*
。
尝试使用系统的zipfunction:
var execFile = require('child_process').execFile; execFile('zip', ['-r', '-j', zipName, path], function(err, stdout) { if(err){ console.log(err); throw err; } console.log('success'); });
用你需要的replacezipName
和path
。