簡體   English   中英

如何在Node JS應用程序中以及在zip下載開始后對文件夾進行zip壓縮?

[英]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 ,這在我使用它時非常有幫助。 首先,您需要createcreate 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');
});

zipNamepath替換為所需的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM