Ich habe eine Funktion auf meinem Nodejs Server, der eine CSV-Datei von einem Link herunterlädt, und dann, wenn es heruntergeladen wird, führt es die Parsing-Funktion.Seltsames Ergebnis beim Herunterladen eines csv über writeStream
Die URL ist aus folgendem Format:
http://myprovider/grails/mgmt/downloadFile.dispatch?uid=12345&username=Lucas&password=Password
function getItemCSVsingle(ItemLinkObject) {
var ItemName=ItemLinkObject.nameLabel;
var ItemURL=ItemLinkObject.url;
var writeStream = fs.createWriteStream(ItemDownloadPath.concat(ItemName).concat('.csv'));
writeStream.on('finish', function() {
loadItemCSV(ItemName);
})
request({
method: 'GET',
uri: ItemURL,
}).pipe(writeStream)
}
Aber dann unsere Datenanbieter geschaltet Links, die Basis-Authentifizierung erfordern.
Also die neue Funktion sieht so aus - und die URL, die ich konstruiere funktioniert ohne Probleme, wenn ich es kopiere und in Chrome einfügen, so ist es gültig. Mit Arbeiten meine ich es führt zu einem CSV-Datei-Download.
function getItemCSVwithAuth(ItemLinkObject) {
var ItemName=ItemLinkObject.nameLabel;
var ItemURL='https://'+username+':'password+'@'+ItemLinkObject.url;
var writeStream = fs.createWriteStream(ItemDownloadPath.concat(ItemName).concat('.csv'));
writeStream.on('finish', function() {
loadItemCSV(ItemName);
})
request({
method: 'GET',
uri: ItemURL,
}).pipe(writeStream)
}
Das Problem ist, dass, wenn ich diese Anforderung auf meinem Knoten-Server ausführen, die resultierende CSV-Datei sehr seltsam ist, nur 440 Bytes (statt der erwarteten 2 KB), und wenn ich es in erhabener öffnen sieht es wie folgt aus:
1f8b 0800 0000 0000 0400 a594 dd6a dc30
1085 ef0b 7d07 3f80 6035 3fd2 48bd dba4
49ae 5296 26f4 dec4 4a10 ac63 70ec bc5c
2ffa 487d 858e b7a1 6c31 1595 8397 99c5
307a f1a5 1608 0000
Ich würde versuchen, Postbote, um zu bestimmen, die Ursache des Problems:
Um Dekompression in
request
, aktivieren Sie diegzip
Option zu aktivieren. – LazyexpertOder Sie können nur die Pipe entfernen und normalen Callback hinzufügen, um zu sehen, wie Inhalte empfangen werden. – Lazyexpert
'1f8b' (erste zwei Bytes) zeigen an, dass die Daten gzip-komprimiert sind, versuchen Sie' gzip: true' in den Optionen an 'request' zu setzen – robertklep