Node.js
で指定したディレクトリをZIP圧縮するためのサンプルコードとなります。async/await
を用いて書いてみます。
なお、圧縮処理には archiver
というnpmライブラリを利用します。
https://github.com/archiverjs/node-archiver
下記のような状況を想定しています。
ここのdir
を dir.zip
にするイメージです。
dir├── sample1.mp4
├── sample1.mov
└── sample2.mov
サンプルコード
archiver
をインストール
yarn add archiver
なるべくシンプルに書こうと思い、削れるところは削ってみています。archiver
自体の細かな使い方は公式を参照してみてください。
constfs=require('fs');constpath=require('path');constarchiver=require('archiver');constzipArchive=asynctargetDir=>{constzipPath=`${targetDir}.zip`;constoutput=fs.createWriteStream(path.join(__dirname,zipPath));constarchive=archiver('zip',{zlib:{level:9}});archive.pipe(output);archive.glob(path.join(targetDir,'*.mp4'));archive.glob(path.join(targetDir,'*.mov'));awaitarchive.finalize();return;}(async()=>{awaitzipArchive('dir');})();
圧縮する際のオプションについて(archiver)
constarchive=archiver('zip',{zlib:{level:9}});
この記述はREADMEに記述されていたものをそのまま拝借していますが、ここの指定により圧縮率が異なるようです。
ためしにここのオプションをなしにしてみたところ、ZIP圧縮時の容量がやや大きくなりました。
(圧縮するデータにもよるかと思いますが、自身の場合は0.5MBほど大きくなりました)
該当するドキュメントはここあたりになるかと思います。
https://www.archiverjs.com/archiver
https://www.archiverjs.com/global.html#ZipOptions