Hiroshi Kuwabara 様 ありがとうございます。 adm-zipで無事に解決できました! 最終的には下記のようなコードにしてみました。
var http = require("http"); var fs = require("fs"); var AdmZip = require('adm-zip'); var url = "http://ja.wordpress.org/latest-ja.zip"; var savedir = "./tmp" var unzipdir = savedir+"/wp"; var zipdir = savedir+"/wordpres-latest.zip"; var output = fs.createWriteStream(zipdir); var req = http.get(url,function(res){ res.pipe(output); res.on("data",function(){ console.log("on-data・・・"); }); res.on("end",function(){ console.log("finish!!!!!!!!"); output.close(); }); }); output.on("close",function(){ console.log("close!!!!!!!!"); setTimeout(function(){ // setTimeoutでタイミングをずらさないと下記のエラー //Invalid or unsupported zip format. No END header found console.log("setTimeout!!!!!!!!"); var zip = new AdmZip(zipdir); zip.extractAllTo(unzipdir,true); },1000); }); zipデータをダウンロードさせた後、すぐに解凍しようとするとエラーが出てしまったので、 setTimeoutで少しタイミングをずらしてみると回避できました(汗 きちんとした方法ではないと思いますのでまた時間をとって悩んでみたいと思います。 2014年2月24日月曜日 15時31分53秒 UTC+9 Hiroshi Kuwabara: > > > zlibモジュールでは直接ディレクトリの解凍はできまでんでしたね。 > > Streamインターフェースではないですが、adm-zipというモジュールだと解凍できました。 > https://github.com/cthackers/adm-zip > > > > On Saturday, February 22, 2014 6:09:45 PM UTC+9, meganetops wrote: >> >> node組込みのzlibモジュールにチャンレンジしてみました。 >> http://nodejs.jp/nodejs.org_ja/docs/v0.10/api/zlib.html >> >> サンプルにあったような1ファイルだけを圧縮、解凍は動かせる事はできましたが、 >> ディレクトリを圧縮したzipを解凍ができませんでした・・・。 >> 下記のようなコードでためしてみています。 >> >> >> var fs = require('fs'); >> var zlib = require("zlib"); >> var un_zip = zlib.createUnzip(); >> >> var inp = fs.createReadStream("wordpress-3.8.1-ja.zip"); >> var out = fs.createWriteStream("tmp/wp"); >> >> inp.pipe(un_zip).pipe(out); >> >> >> 下記のエラーが出てうまくいきませんでした。 >> >> events.js:72 >> >> throw er; // Unhandled 'error' event >> >> ^ >> >> Error: incorrect header check >> >> at Zlib._binding.onerror (zlib.js:295:17) >> >> エラーをもとに昨日からググってみましたが、 >> クライアントサイドのJSとWordpressを触るのにPHPを少しやっている私レベルでは >> ちょっと歯がたちません(汗 >> >> 何かヒントをいただけませんでしょうか。 >> >> よろしくお願いいたします。 >> >> >> >> 2014年2月21日金曜日 10時50分06秒 UTC+9 meganetops: >>> >>> はじめまして。 >>> >>> 私はNodeを少し触って遊んでみているWebデザイナーです。 >>> WordPressをダウンロードしてzipを解凍するコードを書いて動かしてみたところ、 >>> maximum call stack size exceeded エラーが出てしまいいきずまってしまいました。 >>> >>> 環境は、 >>> OS:Window7 >>> Node: v.0.10.24 >>> です。 >>> あと、zipの展開には「node-unzip <https://github.com/EvanOxfeld/node-unzip> >>> 」というものを使用させていただいております。 >>> >>> 下記のコードで動かしてみているのですが何が原因となっていますでしょうか? >>> >>> var http = require("http"); >>> var fs = require("fs"); >>> var unzip = require("unzip"); >>> >>> var url = "http://ja.wordpress.org/latest-ja.zip"; >>> var savedir = "./tmp" >>> var output = fs.createWriteStream(savedir+"/wordpres-latest.zip"); >>> >>> >>> var req = http.get(url,function(res){ >>> res.pipe(output); >>> >>> res.on("data",function(){ >>> console.log("on-data・・・"); >>> }); >>> res.on("end",function(){ >>> console.log("finish!!!!!!!!"); >>> output.close(); >>> fs.createReadStream(savedir+"/wordpres-latest.zip") >>> .pipe(unzip.Extract({ path: savedir })) >>> .on('error', function (err) { console.log('error', err); }) >>> .on('close', function () { console.log('closed'); }); >>> }); >>> }); >>> >>> zipの解凍はできているようで、 >>> 展開されたファイルは出てきています。 >>> >>> よろしくお願いいたします。 >>> >>> >>> -- --- このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。 このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。 その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。