Wie Puffer eine HTTP-Antwort mit dem request-Modul?
Ich würde gerne streamen Sie den Inhalt einer HTTP response in eine variable. Mein Ziel ist es, ein Bild über request()
, und speichern Sie es in MongoDB - aber das Bild ist immer beschädigt.
Dies ist mein code:
request('http://google.com/doodle.png', function (error, response, body) {
image = new Buffer(body, 'binary');
db.images.insert({ filename: 'google.png', imgData: image}, function (err) {
//handle errors etc.
});
})
Was ist der beste Weg, um Puffer - /- streams, in diesem Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Anfrage-Modul puffert die Antwort für Sie. In der callback
body
ist ein string (oderBuffer
).Bekommen Sie nur einen stream zurück, aus Anfrage, wenn Sie keinen Rückruf;
request()
gibt eineStream
.Siehe die Dokumentation für weitere Details und Beispiele.
Anfrage wird davon ausgegangen, dass die Antwort ist text, also es versucht zu konvertieren, Antwort Körper in einen sring (unabhängig von der MIME-Typ). Diese korrupten binäre Daten. Wenn Sie möchten, um die raw-bytes angeben
null
encoding
.set encoding auf null, return Buffer.
Haben Sie versucht, Rohrleitungen das?:
(Wenn auch nicht vertraut genug mit Mongo zu wissen, ob es unterstützt die direkte Einfügungen von binären Daten wie diese, ich weiß, CouchDB und Riak tun.)
Heute, Sie kann leicht abrufen einer Datei in Binär mit 8 Knoten, RequestJS und async-await. Ich verwendet die folgenden:
Die Antwort war ein Puffer, der die bytes des pdf-Dokuments. Viel sauberer als große option Objekte und old skool-callbacks.