node.jsでzipファイルの中身をちょっと見てみる
node.jsでzipの書庫をちょっと扱うメモ。
環境:Ubuntu 12.04 LTS 64bit / nodebrew 0.6.0 / node 0.8.1 / npm 1.1.33
標準モジュールのzlibについて
zlibって標準モジュールあったけど、それでいろいろ出来るのかなーと思ったら。
zlib.unzip in windows - not workingには
「zlibはgzipとdeflateしかサポートしてなくて、zipはサポートしてないんだ」とのこと。
zipモジュールをインストール
というわけでzip(の展開)を扱えるモジュールを探してみたら以下のスレッドにたどり着きました。
Unzip files with node.js on Windows
zipっていうそのものズバリなモジュールがあるみたい。
$ npm install zip
試してみる
// app.js var zip = require('zip'), fs = require('fs'), data = fs.readFileSync(process.argv[2]), reader = zip.Reader(data); var key, files = reader.toObject('utf8'); for (key in files) { console.log('key: %s', key); console.log('%s', files[key]); }
実行時引数で受け取ったzipファイルを展開して、ファイル名とその中身を出力するコード。
このモジュール、マニュアルみたいなのがないから仕方なくソース読んだけど、他のメソッドは公開されてはいるものの、外から使うような感じではなかったので、おそらくtoObjectするのが普通の使い方なのだと思う。
$ for i in `seq 1 3`; do echo $i > $i.txt; done $ zip file.zip *.txt $ node app.js file.zip key: 1.txt 1 key: 2.txt 2 key: 3.txt 3
とか、だいたいこんな感じ。一応これでzipは扱えるみたい。