溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Node.js中zip壓縮和zip解壓縮實(shí)例用法

發(fā)布時(shí)間:2021-09-03 11:37:55 來(lái)源:億速云 閱讀:341 作者:chen 欄目:web開(kāi)發(fā)

本篇內(nèi)容主要講解“Node.js中zip壓縮和zip解壓縮實(shí)例用法”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Node.js中zip壓縮和zip解壓縮實(shí)例用法”吧!


NodeJS文件(夾)壓縮/解壓方案(zip/unzip)-Linuxzip相關(guān)命令

Use adm-zip

adm-zip支持archiveunarchive一個(gè)或多個(gè)文件或者整個(gè)文件夾的功能,使用非常的簡(jiǎn)單方便。

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);


Use JSZip

這個(gè)庫(kù)在使用的時(shí)候需要把文件一個(gè)個(gè)增加到zip對(duì)象中,而且需要把內(nèi)容也手動(dòng)添加,再使用寫(xiě)文件操作把內(nèi)存中的zip對(duì)象轉(zhuǎn)成物理存儲(chǔ)。所以如果是對(duì)于一整個(gè)文件夾來(lái)說(shuō),就很麻煩,需要遍歷文件夾

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里面也有個(gè)folder方法,但它只是用來(lái)切換zip對(duì)象內(nèi)部的虛擬路徑,比如zip.folder("img").file('a.txt')就是在zip中添加一個(gè)img子目錄,在下面創(chuàng)建a.txt,效果等同于zip.file("img/a.txt")。這里還需要注意的是,文件的內(nèi)容都需要手動(dòng)添加,如果僅僅是zip.file("a.txt");只是在zip對(duì)象中創(chuàng)建了內(nèi)容為空的txt文件,而且它只是存在于內(nèi)存中,需要寫(xiě)文件操作后才會(huì)真正存到磁盤(pán)。

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

Use archiver and unzip

archiver很強(qiáng)大,支持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文件

語(yǔ)  法:unzip [-cflptuvz][-agcjlmnoqsvx][-P <密碼>][.zip文件][文件][-d <目錄>][-x <文件>] 或 unzip [-Z]

補(bǔ)充說(shuō)明:unzip為.zip壓縮文件的解壓縮程序。

參  數(shù):

-c將解壓縮的結(jié)果顯示到屏幕上,并對(duì)字符做適當(dāng)?shù)霓D(zhuǎn)換。

-f更新現(xiàn)有的文件。

-l顯示壓縮文件內(nèi)所包含的文件。

-p-c參數(shù)類似,會(huì)將解壓縮的結(jié)果顯示到屏幕上,但不會(huì)執(zhí)行任何的轉(zhuǎn)換。

-t檢查壓縮文件是否正確。

-u-f參數(shù)類似,但是除了更新現(xiàn)有的文件外,也會(huì)將壓縮文件中的其他文件解壓縮到目錄中。

-v執(zhí)行是時(shí)顯示詳細(xì)的信息。

-z僅顯示壓縮文件的備注文字。

-a對(duì)文本文件進(jìn)行必要的字符轉(zhuǎn)換。

-b不要對(duì)文本文件進(jìn)行字符轉(zhuǎn)換。

-C壓縮文件中的文件名稱區(qū)分大小寫(xiě)。

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

-L將壓縮文件中的全部文件名改為小寫(xiě)。

-M將輸出結(jié)果送到more程序處理。

-n解壓縮時(shí)不要覆蓋原有的文件。

-o不必先詢問(wèn)用戶,unzip執(zhí)行后覆蓋原有文件。

-P<密碼> 使用zip的密碼選項(xiàng)。

-q執(zhí)行時(shí)不顯示任何信息。

-s將文件名中的空白字符轉(zhuǎn)換為底線字符。

-V保留VMS的文件版本信息。

-X解壓縮時(shí)同時(shí)回存文件原來(lái)的UID/GID。

[.zip 文件]指定.zip壓縮文件。

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

-d<目錄>指定文件解壓縮后所要存儲(chǔ)的目錄。

-x<文件>指定不要處理.zip壓縮文件中的哪些文件。

-Z unzip-Z等于執(zhí)行zipinfo指令。

基本用法是:zip [參數(shù)][打包后的文件名] [打包的目錄路徑]

參數(shù):

-a將文件轉(zhuǎn)成 ASCII 模式

-F嘗試修復(fù)損壞的壓縮文件

-h顯示幫助界面

-m將文件壓縮之后,刪除源文件

-n特定字符串 不壓縮具有特定字尾字符串的文件

-o將壓縮文件內(nèi)的所有文件的最新變動(dòng)時(shí)間設(shè)為壓縮時(shí)候的時(shí)間

-q安靜模式,在壓縮的時(shí)候不顯示指令的執(zhí)行過(guò)程

-r將指定的目錄下的所有子目錄以及文件一起處理

-S包含系統(tǒng)文件和隱含文件(S 是大寫(xiě))

范 例:

zip命令可以用來(lái)將文件壓縮成為常用的zip格式。unzip命令則用來(lái)解壓縮zip文件。 壓縮文件abc.txt和一個(gè)目錄dir1,名字test.zip

zip -r test.zip abc.txt dir1
#解壓縮:
```sh
unzip test.zip

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

unzip abc\?.zip

注釋:?表示一個(gè)字符,如果用*表示任意多個(gè)字符。 不解壓,只查看內(nèi)容

unzip -v test.zip

驗(yàn)證zip文件完成性,查看網(wǎng)上下的包包是不是已經(jīng)下載完了

unzip -t test.zip

我用-v選項(xiàng)發(fā)現(xiàn)music.zip壓縮文件里面有很多目錄和子目錄,并且子目錄中其實(shí)都是歌曲mp3文件,我想把這些文件都下載到第一級(jí)目錄,而不是一層一層建目錄:

unzip -j music.zip

到此,相信大家對(duì)“Node.js中zip壓縮和zip解壓縮實(shí)例用法”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI