アーカイブと解凍の既存のフォルダー全体をプロジェクトで使用する必要があります。解決策を探すとき、主に adm-zip、JSZip、アーカイバなどの一般的なライブラリを試しました。
1.adm-zip
を使用します
adm-zip は、1 つ以上のファイルまたはフォルダー全体のアーカイブとアーカイブ解除の機能をサポートしており、非常にシンプルで便利に使用できます。
var adm_zip = require('adm-zip'); //creating archives var zip = new adm_zip(); zip.addLocalFolder('archiver'); zip.writeZip('adm/adm-archive.zip'); //extracting archives var unzip = new adm_zip('adm/adm-archive.zip'); unzip.extractAllTo("adm/adm-unarchive/", /*overwrite*/true);
長所と短所:
1. 圧縮と解凍を同時に実現し、パスが提供されていれば既存のファイルやフォルダーを操作できます。多くのインターフェイスが実装されており、使いやすいです。
2. それ自体にバグがあり、解凍したファイルを元のファイルに戻せない場合があります。これらのバグが時間の経過とともに修正されることを願っています。
2.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; });
JSZip にもフォルダーメソッドがありますが、これは zip オブジェクト内の仮想パスを切り替えるためにのみ使用されます。たとえば、zip.folder("img").file('a.txt') を追加します。 img サブディレクトリを zip に追加し、以下に a.txt を作成します。効果は zip.file("img/a.txt") と同等です。ここで、ファイルの内容を手動で追加する必要があることにも注意してください。これが zip.file("a.txt") の場合は、zip オブジェクトに空の内容を含む txt ファイルが作成されるだけです。がメモリ内に存在する場合は、実際にディスクに保存する前にファイルに書き込む必要があります。
長所と短所:
1. リアルタイムで受信した一部のデータを zip に変換する場合に適しています。 2. 既存のフォルダーを操作するには、コンテンツを 1 つずつ zip オブジェクトに追加してからファイルに変換する必要があります。
3. 多くのコーディングには注意が必要です。
4. 圧縮機能のみ。
3. アーカイバと解凍
を使用します。
この組み合わせは私が最後に使用したものです。アーカイバーは非常に強力で、既存のフォルダーを圧縮するためのパスを指定するだけで済みます。 圧縮:
var fs = require('fs'); var archiver = require('archiver'); var output = fs.createWriteStream('archiver-unzip.zip'); var archive = archiver('zip'); archive.on('error', function(err){ throw err; }); archive.pipe(output); archive.bulk([ { src: ['archiver/**']} ]); archive.finalize();
解凍:
var fs = require("fs"); var unzip = require("unzip"); fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));
長所と短所:
1. 長い間試されており、バグが少ない。
2. 使い方は簡単で、フォルダーを移動する必要はありません。
3. 圧縮または解凍のみを提供し、両方の機能を提供するわけではありません。 (つまり、adm-zip は実際には非常に便利ですが、バグが欠点です...)
これらは私が昨日見つけたライブラリのほんの一部です。他のライブラリをお勧めすることも歓迎します