2013-01-01 7 views
7

मैं nseindia.com से फ़ाइलों को डाउनलोड करने और स्मृति में अनजिप करने का प्रयास कर रहा हूं। मैं नोडजेस वेबकिट और एडम-ज़िप का उपयोग कर रहा हूं। मुझे कंसोल पर त्रुटि मिल रही है:nodejs url से फ़ाइल को डाउनलोड और अनजिप करें, त्रुटि कोई END शीर्षलेख नहीं मिला

अनचाहे अमान्य या असमर्थित ज़िप प्रारूप। कोई अंत नहीं हैडर पाया

कोड:

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); 

मैं धारा लेकिन कोई सफलता समाप्त करने के लिए निम्नलिखित की कोशिश की।

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

धन्यवाद वादिम। इसने काम कर दिया। एक प्रश्न, अगर डाउनलोड की गई फ़ाइल (जिसे हम अनजिप कर रहे हैं) इसमें एकाधिक ज़िप हैं, तो हम उन्हें कैसे निकाल सकते हैं? प्रवेश-ज़िप करने के लिए कोई "अंत" घटना नहीं है। – mrkanitkar

+0

जहां तक ​​मुझे लगता है कि विधि 'extractAllTo' सिंक्रोनस है। यह निष्कर्षण पूरा होने तक ईवेंट लूप को अवरुद्ध करता है। तो आपको यहां 'एंड' ईवेंट की आवश्यकता नहीं है। तुल्यकालिक libs के साथ सावधान रहें। यह node.js रास्ता नहीं है और हाइलोड पर फ्रीज हो सकता है। –

संबंधित मुद्दे