2017-07-25 3 views
0

Ich benutze Knoten https/http-Modul zum Download der Datei. Der Code sieht wie folgt aus:Node https Datei von URL abrufen und entpacken

https.get(url) 
.on('response', (response) => { 
    response.pipe(fs.createWriteStream(dataDir + filename)) 
} 

Im nächsten Schritt I unzip Modul verwenden, um die Datei zu entpacken.

fs.createReadStream(dataDir + filename) 
.pipe(unzip.Extract({path: dataDir})) 
.on('close',() => { something } 
.on('error',() => { catch error} 

In den meisten Fällen funktioniert alles gut. Manchmal entziffert Modul jedoch manchmal diesen Fehler:

Error: invalid signature: 0x6d74683c 

Das einzige Problem, das ich bemerken kann, ist der Dateiname. Ich schnappe Dateiname von URL. Es ist der letzte Parameter einer URL. In einigen Fällen unterscheidet sich der genaue Dateiname jedoch von dem in URL angezeigten Dateinamen. Zum Beispiel:

https://github.com/request/request/archive/master.zip 

Der Name in URL gezeigt ist master.zip aber wenn ich es der Name ist herunterladen request-master.zip.

Ist das das eigentliche Problem? Wenn ja, wie kann ich es lösen?

Antwort

0

Der Dateiname ist wahrscheinlich eher ein Symptom als die Ursache. Das Modul unzip wird nicht verwaltet und hat viele offene Probleme. Es ist wahrscheinlich Schuld und sollte nicht verwendet werden, egal.

Probieren Sie decompress oder yauzl statt. Da Sie versuchen, das Archiv in einem Stream zu extrahieren, möchten Sie vielleicht auch lesen, wie das ist not truly possible.

+0

Vielen Dank für die Antwort. Ich werde zuerst Yauzl versuchen. – zhangjinzhou

Verwandte Themen