7
Próbuję pobrać pliki z witryny nseindia.com i rozpakować w pamięci. Używam webkita nodejs i adm-zip. Pojawia się błąd na konsoli:nodejs pobierz i rozpakuj plik z adresu URL, błąd Nie znaleziono nagłówka END
Uszkodzony Nieprawidłowy lub nieobsługiwany format zip. Nie znaleziono END header
kod:
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);
próbowałem następujące czynności, aby zakończyć strumień, ale bez powodzenia.
out.end();
out.destroy();
Z góry dziękuję.
Dzięki Vadim. Zadziałało. Jedno pytanie, jeśli pobrany plik (który rozpakowujemy) zawiera wiele zipów, jak je wyodrębnić? Nie ma żadnego "końcowego" wydarzenia dla adm-zip. – mrkanitkar
O ile widzę metodę "extractAllTo" jest synchroniczna. Blokuje pętlę zdarzeń aż do zakończenia ekstrakcji. Więc nie potrzebujesz tutaj wydarzenia "end". Uważaj na synchroniczne biblioteki. Nie jest to metoda node.js i może powodować zawieszenie na highload. –