はじめに
初めてunzipperを使いました
unzipperの最も基本的な使い方ですが、初歩の初歩で躓いてしまいました
具体的にはZIPを解凍したら解凍先のディレクトリにあるはずのファイルがなかったという感じです
エラーが出ないので一瞬気付きにくいですけど同じ問題起きた人いますか?
問題のソース
fs.createReadStream('test.zip')
.pipe(unzipper.Extract({ path: 'output' }));
解決したソース
const directory = await unzipper.Open.file('test.zip');
await directory.extract({ path: 'output' })
再現
100個ファイルを作成してZIP化する
touch file_{1..100}.txt
zip test.zip file_*
unzipperを使ってZIPを解凍する
fs.createReadStream('test.zip')
.pipe(unzipper.Extract({ path: 'output' }));
解凍先を開く
$ ls output
file_1.txt file_100.txt file_12.txt file_14.txt file_16.txt file_18.txt file_2.txt file_21.txt
file_10.txt file_11.txt file_13.txt file_15.txt file_17.txt file_19.txt file_20.txt file_22.txt
100ファイルあるはずが16ファイルしかない><
おわり
unzipper.Openを使えば良いと思います
公式ドキュメントでもunzipper.Openが上の方に紹介されていますし、fs.createReadStreamを使う方法はどうやら(legacy)と書いてある(?)
補足
調べていくとわかると思うんですがfs.createReadStreamを使う方法だと解凍時ファイルを作成するところで躓いているっぽいです
ディレクトリかファイルか判定してディレクトリを作る処理を明示的に書いてあげれば直りますね