Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8883

Node.jsで指定したディレクトリをZIP圧縮するサンプル (async/awaitを用いて書く)

$
0
0

Node.jsで指定したディレクトリをZIP圧縮するためのサンプルコードとなります。
async/awaitを用いて書いてみます。

なお、圧縮処理には archiverというnpmライブラリを利用します。

https://github.com/archiverjs/node-archiver

下記のような状況を想定しています。
ここのdirdir.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


Viewing all articles
Browse latest Browse all 8883

Trending Articles