2013-01-01 12 views
7

nseindia.comからファイルをダウンロードしてメモリに解凍しようとしています。私はnodejs webkitとadm-zipを使用しています。コンソールでエラーが表示されます。nodejs URLからファイルをダウンロードして解凍します。エンドヘッダーが見つかりません。

未読無効またはサポートされていないzip形式です。私は、ストリームが、なしの成功を終了するには、次の試してみました

var http = require('http'), 
       fs = require('fs'), 
       request = require('request'), 
       AdmZip = require('adm-zip'), 
       out = fs.createWriteStream('data/nseeqbhav.zip'); // For saving NSE Equity bhavcopy 


// Downloading NSE Bhavcopy 
request(
      { method: 'GET', 
       uri: 'http://www.nseindia.com/content/historical/EQUITIES/2012/DEC/cm19DEC2012bhav.csv.zip', 
       headers: { "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11", 
        "Referer": "http://www.nseindia.com/products/content/all_daily_reports.htm", 
        "Accept-Encoding": "gzip,deflate,sdch", 
        "encoding": "null", 
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
        "Cookie": "cookie" 
       } 
      } 
      ).pipe(out); 
      var zip = new AdmZip("data/nseeqbhav.zip"), 
      zipEntries = zip.getEntries(); 
      zip.extractAllTo(/*target path*/"data/unzip/", /*overwrite*/true); 

:いいえENDヘッダーは

コードは認められませんでした。

out.end(); 
out.destroy(); 

ありがとうございます。

答えて

8

完全に書き込まれる前にファイルを読み込もうとしています。あなたは仕上げの文章を待つ必要があります。

var http = require('http'), 
    fs = require('fs'), 
    request = require('request'), 
    AdmZip = require('adm-zip'), 
    out = fs.createWriteStream('data/nseeqbhav.zip'); // For saving NSE Equity bhavcopy 

// Downloading NSE Bhavcopy 
var req = request(
    { 
     method: 'GET', 
     uri: 'http://www.nseindia.com/content/historical/EQUITIES/2012/DEC/cm19DEC2012bhav.csv.zip', 
     headers: { "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11", 
      "Referer": "http://www.nseindia.com/products/content/all_daily_reports.htm", 
      "Accept-Encoding": "gzip,deflate,sdch", 
      "encoding": "null", 
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
      "Cookie": "cookie" 
     } 
    } 
); 

req.pipe(out); 
req.on('end', function() { 
    var zip = new AdmZip("data/nseeqbhav.zip"), 
    zipEntries = zip.getEntries(); 
    zip.extractAllTo(/*target path*/"data/unzip/", /*overwrite*/true); 
}); 
+0

ありがとうございました。出来た。 1つの質問は、ダウンロードされたファイル(解凍している)に複数のzipがある場合、どのように抽出するのでしょうか? adm-zipには「終了」イベントはありません。 – mrkanitkar

+0

私が見る限り、 'extractAllTo'メソッドは同期です。抽出が完了するまでイベントループをブロックします。したがって、ここでは 'end'イベントは必要ありません。同期ライブラリには注意が必要です。それはnode.jsの方法ではなく、高負荷時にフリーズする可能性があります。 –