Ich habe eine Anforderung erhalten in Knoten, die erfolgreich Daten von API empfängt.Node-Anforderung in Datei schreiben beschädigt
Wenn ich diese Antwort direkt an eine Datei wie diese leitet, funktioniert es, die erstellte Datei ist eine gültige, lesbare PDF (wie ich von der API erwarten).
var http = require('request');
var fs = require('fs');
http.get(
{
url:'',
headers:{}
})
.pipe(fs.createWriteStream('./report.pdf'));
Einfach, aber die Datei beschädigt wird, wenn ich die Ereignis Emittern der Anfrage verwenden wie dieses
http.get(
{
url:'',
headers:{}
})
.on('error', function (err) {
console.log(err);
})
.on('data', function(data) {
file += data;
})
.on('end', function() {
var stream = fs.createWriteStream('./report.pdf');
stream.write(file, function() {
stream.end();
});
});
Ich habe versucht, alle Arten diese Datei zu schreiben, und es endet immer in einer völlig leeren pdf - Die einzige gültige PDF-Datei ist die Pipe-Methode.
Wenn ich die Ereignisse protokollieren, scheint die Sequenz korrekt zu sein - dh, alle Teile empfangen und dann wird die end
am Ende ausgelöst.
Es macht Dinge unmöglich, etwas nach dem Rohr zu tun. Was macht Pipe anders als der Writestream?
tun u denken die Art, wie ich es tat, mit Strings ist ein Problem, auch wenn die Antwort tatsächlich utf8 ist? – yoyoma
@yoyoma PDFs können binäre Daten enthalten, sie sind nicht vollständig zu 100% UTF-8-kodiert (der _text_ in den PDFs kann sein, aber es gibt viele andere Dinge in einem PDF). – robertklep
thx eine Menge das ist das, das so funktionierte es richtig markiert - ich hatte verschiedene Puffer vorher versucht, aber ich denke nicht, dass ich die concat richtig gemacht habe – yoyoma