Node.jsでのZip解凍
node-zipモジュールで簡単に操作できました。
インストール
$ mkdir zip_sample $ cd zip_sample/ $ npm init $ npm install node-zip --save
app,js
引数にファイル名を渡すと、Zipファイル内のファイルを出力します。
ファイルの実体はdataに入ってますが、元データが画像のため、ここでは出力していません。
※fs.readFileでエンコードを'binary'にしないと、ちゃんと読込めません。
var fs = require('fs'); var file = process.argv[2]; fs.readFile(file, 'binary', function(err, data) { if (err) throw err; var zip = new require('node-zip')(data, {base64: false, checkCRC32: true}); for (var i in zip.files) { for (var j in zip.files[i]) { if (j !== 'data') { console.log(j + ':', zip.files[i][j]); } } } });
Zipファイルの作成
元の階層は以下。
$ find sample
sample
sample/image1.jpg
sample/image2.jpg
$ zip sample.zip sample/* adding: sample/image1.jpg (deflated 1%) adding: sample/image2.jpg (deflated 2%) $ ls sample.zip sample.zip $ zipinfo sample.zip Archive: sample.zip 99443 bytes 2 files -rwxr-xr-x 3.0 unx 44842 bx defN 18-Nov-11 20:59 sample/image1.jpg -rwxr-xr-x 3.0 unx 55630 bx defN 18-Nov-11 20:59 sample/image2.jpg 2 files, 100472 bytes uncompressed, 99097 bytes compressed: 1.4%
実行結果
$ node app.js sample.zip name: sample/ options: { dir: true, base64: false, binary: false, date: Sat Nov 03 2012 15:34:31 GMT+0900 (JST) } name: sample/image1.jpg options: { binary: true, date: Fri Nov 18 2011 20:59:42 GMT+0900 (JST), dir: false, base64: false } name: sample/image2.jpg options: { binary: true, date: Fri Nov 18 2011 20:59:56 GMT+0900 (JST), dir: false, base64: false }