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