[英]How to zip a folder in node js application & after zip downloading start?
我嘗試使用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
和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
的方法來添加目錄及其文件,recusively,賦予其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
的一些解釋:這將遞歸包括所有文件夾**
和文件*
。
嘗試使用系統的zip功能:
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');
});
將zipName
和path
替換為所需的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.