Ich versuche, einen Facebook-Chat-Bot, der Katzenbilder senden kann. Ich verwende eine RESTful API, um die Katzenbilder zu bekommen. Sie werden als rohe PNG zurückgegeben. Der nächste und letzte Schritt besteht darin, dieses Bild in einen lesbaren Stream umzuwandeln, so dass die Facebook Chat API es als Anhang senden kann.Convert PNG von GET-Anfrage in einen lesbaren Stream in Node.js
Ich benutze request.js
, um das Bild zu greifen. Die Dokumentation von Request erwähnt nur das Speichern von Bildern als Datei und das Lesen von Dateien unter stream.Readable
. Ich frage mich, ob es eine Möglichkeit gibt, diese temporäre Datei zu umgehen und das Bild direkt in die Facebook Chat API zu leiten.
Hier ist mein Code so weit:
var request = require("request");
var stream = require("stream");
module.exports = function getCatPicture(api, threadID, body) {
var options = {
url: 'http://thecatapi.com/api/images/get?type=png',
encoding: 'base64'
}
var picStream = new stream.Readable;
request.get(options, function (error, response, body) {
picStream.push(body, 'base64');
var catPic = {
attachment: picStream
};
api.sendMessage(catPic, threadID);
return;
});
}
Ich erhalte eine Fehlermeldung:
Error in uploadAttachment Error: form-data: not implemented
Error in uploadAttachment at Readable._read (_stream_readable.js:457:22)
Error in uploadAttachment at Readable.read (_stream_readable.js:336:10)
Error in uploadAttachment at flow (_stream_readable.js:751:26)
Error in uploadAttachment at resume_ (_stream_readable.js:731:3)
Error in uploadAttachment at nextTickCallbackWith2Args (node.js:442:9)
Error in uploadAttachment at process._tickCallback (node.js:356:17)
Error in uploadAttachment { [Error: form-data: not implemented]
Error in uploadAttachment cause: [Error: form-data: not implemented],
Error in uploadAttachment isOperational: true }
siehe https://github.com/maxogden/mississippi#from und https://github.com/yoshuawuyts/from2-string –
Sie drücken auf den lesbaren Stream nur nach der Anfrage zurückgeben alle pody, weil Sie sind Wenn Sie mit Callback arbeiten, müssen Sie eine Pipe ... wie 'request ('http://google.com/doodle.png') .pipe (fs.createWriteStream ('doodle.png'))' – yeya