首頁  >  文章  >  web前端  >  淺析Node中zip壓縮和zip解壓縮(附程式碼)

淺析Node中zip壓縮和zip解壓縮(附程式碼)

奋力向前
奋力向前轉載
2021-09-03 11:14:334339瀏覽

之前的文章《你值得了解的certbot開啟亞馬遜EC2主機https(程式碼分享)》中,給大家了解了certbot開啟亞馬遜EC2主機https。以下這篇文章給大家了解Node中zip壓縮和zip解壓縮,我們一起看看怎麼做。

淺析Node中zip壓縮和zip解壓縮(附程式碼)

NodeJS檔案(夾)壓縮/解壓縮方案(zip/unzip)-Linux# zip相關指令

Use adm-zip

adm-zip支援archiveunarchive一個或多個檔案或整個資料夾的功能,使用非常簡單的方便。

var adm_zip = require("adm-zip");

//creating archives
var zip = new adm_zip();
zip.addLocalFolder("./dist");
zip.writeZip("./dist.zip");

//extracting archives
var unzip = new adm_zip("dist.zip");
unzip.extractAllTo("./dist", /*overwrite*/ true);

更多apihttps://github.com/cthackers/adm-zip

Use JSZip

這個庫在使用的時候需要把檔案一個個增加到zip物件中,而且需要把內容也手動添加,再使用寫入檔案操作把記憶體中的zip物件轉換成實體儲存。所以如果是對於一整個資料夾來說,就很麻煩,需要遍歷資料夾

var JSZip = require("jszip");
var fs = require("fs");

var zip = new JSZip();

var file_content = fs.readFileSync("archive/a.txt");

zip.file("a.txt", file_content);

var data = fs.readFileSync("archive/img/pic.jpeg");
zip.file("img/pic.jpeg", data, { base64: true });

var zipfolder = zip.generate({ type: "nodebuffer" });

fs.writeFile("jszip.zip", zipfolder, function (err) {
  if (err) throw err;
});

#JSZip裡面也有個folder方法,但它只是用來切換zip物件內部的虛擬路徑,例如zip.folder("img").file('a.txt')就是在zip中新增一個img子目錄,在下方建立a.txt,效果等同於zip.file("img/a.txt")。這裡還需要注意的是,文件的內容都需要手動添加,如果僅僅是zip.file("a.txt");只是在zip物件中創建了內容為空的txt文件,而且它只是存在於記憶體中,需要寫文件操作後才會真正存到磁碟。

更多APIhttps://github.com/Stuk/jszip

#Use archiver and unzip

archiver很強大,支援zip格式tar格式,只需要提供路徑就可以壓縮已存在的資料夾。

壓縮:

// require modules
var fs = require("fs");
var archiver = require("archiver");

// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + "/example.zip");
var archive = archiver("zip", {
  zlib: { level: 9 }, // Sets the compression level.
});

// pipe archive data to the file
archive.pipe(output);

// append a file from stream
var file1 = __dirname + "/file1.txt";
archive.append(fs.createReadStream(file1), { name: "file1.txt" });

// append a file from string
archive.append("string cheese!", { name: "file2.txt" });

// append a file from buffer
var buffer3 = Buffer.from("buff it!");
archive.append(buffer3, { name: "file3.txt" });

// append a file
archive.file("file1.txt", { name: "file4.txt" });

// append files from a sub-directory and naming it `new-subdir` within the archive
archive.directory("subdir/", "new-subdir");

// append files from a sub-directory, putting its contents at the root of archive
archive.directory("subdir/", false);

// append files from a glob pattern
archive.glob("subdir/*.txt");

// finalize the archive (ie we are done appending files but streams have to finish yet)
// 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand
archive.finalize();

解壓縮

var fs = require("fs");
var unzip = require("unzip");

fs.createReadStream("archiver-unzip.zip").pipe(
  unzip.Extract({ path: "unarchive" })
);

#更多APIhttps://github.com/archiverjs/node-archiver

# Linux上zip/unzip指令

apt-get install zip unzip

解壓縮zip

語法:unzip [-cflptuvz][-agcjlmnoqsvx][-P f5b6f42419b005b3bea3fab3622d424d][-x 03e22e6bb4c5ce6b1a1162d3a4e7cfa5] 或unzip [-Z]

#補充說明:unzip為.zip壓縮檔案的解壓縮程式。

參  數:

-c將解壓縮的結果顯示到螢幕上,並對字元進行適當的轉換。

-f更新現有的檔案。

-l顯示壓縮檔案內所包含的檔案。

-p-c參數類似,會將解壓縮的結果顯示到螢幕上,但不會執行任何的轉換。

-t檢查壓縮檔案是否正確。

-u-f參數類似,但除了更新現有的檔案外,也會將壓縮檔案中的其他檔案解壓縮到目錄中。

-v執行是時顯示詳細的資訊。

-z僅顯示壓縮檔案的備註文字。

-a對文字檔案進行必要的字元轉換。

-b不要對文字檔案進行字元轉換。

-C壓縮檔案中的檔案名稱區分大小寫。

-j不處理壓縮檔案中原有的目錄路徑。

-L將壓縮檔案中的全部檔案名稱改為小寫。

-M將輸出結果送到more程式處理。

-n解壓縮時不要覆寫原有的檔案。

-o不必先詢問用戶,unzip執行後會覆寫原有檔案。

-P03887615cecb8509ab8ca954e391fd97 使用zip的密碼選項。

-q執行時不顯示任何資訊。

-s將檔案名稱中的空白字元轉換為底線字元。

-V保留VMS的檔案版本資訊。

-X解壓縮時同時回存檔案原來的UID/GID

[.zip 檔案]指定.zip壓縮檔案。

[檔案]指定要處理.zip壓縮檔案中的哪些檔案。

-dfcb47d58dc8a88646a4e66ec1a1bbd22指定檔案解壓縮後所要儲存的目錄。

-x6390f696e6fb31a54dfd53b86357a260指定不要處理.zip壓縮檔案中的哪些檔案。

-Z unzip-Z等於執行zipinfo指令。

基本用法是:zip [參數][打包後的檔案名稱] [打包的目錄路徑]

參數:

# -a將檔案轉換為ASCII 模式

-F嘗試修正損壞的壓縮檔案

-h顯示說明介面

-m將檔案壓縮之後,刪除來源檔案

-n特定字符串 不压缩具有特定字尾字符串的文件

-o将压缩文件内的所有文件的最新变动时间设为压缩时候的时间

-q安静模式,在压缩的时候不显示指令的执行过程

-r将指定的目录下的所有子目录以及文件一起处理

-S包含系统文件和隐含文件(S 是大写)

范 例:

zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。 压缩文件abc.txt和一个目录dir1,名字test.zip

zip -r test.zip abc.txt dir1
#解压缩:
```sh
unzip test.zip

目录下有abc1.zipabc2.zipabc3.zip,使用通配符

unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。 不解压,只查看内容

unzip -v test.zip

验证zip文件完成性,查看网上下的包包是不是已经下载完了

unzip -t test.zip

我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

unzip -j music.zip

推荐学习:JS视频教程

以上是淺析Node中zip壓縮和zip解壓縮(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:chuchur.com。如有侵權,請聯絡admin@php.cn刪除