如何压缩节点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'); }); 

用你需要的replacezipNamepath