Node での zip 圧縮と zip 解凍の簡単な分析 (コード付き)

奋力向前
リリース: 2021-09-03 11:14:33
転載
4614 人が閲覧しました

前の記事「Amazon EC2 ホスト https を有効にするための certbot について知っておくべきこと (コード共有)」では、Amazon EC2 ホスト https を有効にするための certbot について学びました。次の記事では、Node での zip 圧縮と zip 解凍について紹介しますので、その方法を見てみましょう。

Node での zip 圧縮と zip 解凍の簡単な分析 (コード付き)

NodeJSファイル (フォルダー) 圧縮/解凍スキーム (zip/unzip)-Linuxon zip 関連コマンド

adm-zip を使用します

adm-zip は、archive および unarchive の 1 つ以上をサポートします。ファイルまたはフォルダー全体の機能は非常にシンプルで使いやすいです。

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/ctackers/adm-zip

JSZip を使用する

ファイルを使用する場合は、このライブラリを使用する必要があります

zip オブジェクトに 1 つずつ追加され、コンテンツを手動で追加する必要があります。その後、ファイル書き込み操作を使用してメモリ内の 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;
});
ログイン後にコピー

JSZipfolder という方法もありますが、使用のみ zip オブジェクト内の仮想パスを切り替えます。たとえば、zip.folder("img").file('a.txt') に 1 つ追加します。 zip img サブディレクトリに a.txt を作成します。その効果は zip.file("img/a.txt") と同等です。ファイルの内容を手動で追加する必要があることにも注意してください。単に zip.file("a.txt"); の場合、コンテンツは zip 内に作成されるだけです。 オブジェクト。空の txt ファイル。メモリ内にのみ存在し、実際にディスクに保存する前にファイルに書き込む必要があります。

その他の APIhttps://github.com/Stuk/jszip

アーカイバを使用して解凍します

アーカイバ非常に強力です。 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

zip Linux の /unzip コマンド

apt-get install zip unzip
ログイン後にコピー

Unzip

zipFile

構文: unzip [-cflptuvz][-agcjlmnoqsvx][-P <パスワード> ;][ .zip ファイル][ファイル][-d <ディレクトリ>][-x <ファイル>] または解凍 [-Z]

追加手順:

.zip の解凍解凍ツール 圧縮ファイル。

パラメータ:

-c解凍結果を画面に表示し、文字を適切に変換します。

-f既存のファイルを更新します。

-l圧縮ファイルに含まれるファイルを表示します。

-p-c パラメータに似ており、解凍結果を画面に表示しますが、変換は実行しません。

-t圧縮ファイルが正しいか確認してください。

-u-f パラメータに似ていますが、既存のファイルを更新するだけでなく、圧縮ファイル内の他のファイルもディレクトリに解凍されます。

-v実行時に詳細情報を表示します。

-z圧縮ファイルのコメントテキストのみを表示します。

-a必要な文字をテキストファイルに変換します。

-bテキスト ファイルに対して文字変換を実行しないでください。

-C圧縮ファイル内のファイル名は大文字と小文字が区別されます。

-j圧縮ファイル内の元のディレクトリ パスを処理しません。

-L圧縮ファイル内のすべてのファイル名を小文字に変更します。

-M 出力結果を more プログラムに送信して処理します。

-n解凍時に元のファイルを上書きしないでください。

-o最初にユーザーに確認する必要はありません。unzip は実行後に元のファイルを上書きします。

-P<パスワード> zip のパスワード オプションを使用します。

#-q

実行中に情報は表示されません。

-s

ファイル名の空白文字をアンダースコア文字に変換します。

-V

VMS のファイル バージョン情報を保持します。

-X

解凍すると、ファイルの元の UID/GID も同時に保存されます。

[.zip ファイル]

.zip 圧縮ファイルを指定します。

[ファイル]

.zip 圧縮ファイル内のどのファイルを処理するかを指定します。

-d<ディレクトリ>

解凍後にファイルを保存するディレクトリを指定します。

-x

.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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
js
ソース:chuchur.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート