zip.jsを触ってみた

 プログラム
 公開日:2015年4月9日

 ふと、JavaScriptでZIPファイルを扱うのに
良さげなライブラリはないかなと探してみたら、
JSZipzip.js というのを見つけました。

 JSZip は node.js にも対応しているようです。
デモ(,,)の出来が良さげだったので、
zip.js を触ってみることにしました。

 使い方は、上述したデモのソースを参照したら大体理解できました。
ダウンロードしたファイルにサンプルソースも付いてるので、
これを参照するのも良さそうです。

 デフォルトで web worker に対応しているので、
圧縮や展開を別スレッドで実行して性能向上が期待できそう。
web worker として読み込まれるスクリプトファイル、つまり
z-worker.js, deflate.js, inflate.js の3つの置き場所は
以下のように必要に応じて調整できるようになっています。

 ただ、日本語のファイル名は文字化けしてしまうので改造してみました。
文字コードを変換するために、encoding.js を使います。
zip.js より前にscriptタグを使って読み込むようにします。
ZIP内部のファイル名エンコーディングは、
ASCII か UTF8 のいずれかになるようです。
SJIS等のマルチバイトはASCIIとして処理されるので文字化けするみたい。
zip.js の一部を以下のように改造して対応しました。

 ところで、
zip.js には ZIPファイルを FileSystem のように扱える
zip-fs.js というのが同梱されています。
zip-fs.js では zip.js の FileWriter という機能を使っているのですが、
なぜか zip.fs にはその機能が実装されていません。
デモ3においてフォルダの内容をZIPとしてexportするとエラーとなります。
なぜ実装されていないのかは不明。
FileSystem API を使ってどうにかするしかないのか?
zip-fs.js を使わなくても圧縮や展開はできるのでとりあえず問題はなさそう。

コメント投稿