使用Nodejs Stream如何有效地发布带有远程图像的推文?

时间:2016-04-06 14:47:15

标签: node.js http twitter pipe node.js-stream

我需要下载远程图片,其路径保存在wineTweet.label attribut上。 然后使用此图片发布推文。

我的实现正在运行,但我首先将图像保存到文件中,然后在发布之前将其读取。

以下是代码:

    var file = fs.createWriteStream("file.jpg");
    https.get(wineTweet.label, function (response) {
        response.pipe(file);
        file.on('finish', function () {
            var data = require('fs').readFileSync('file.jpg');
            // Make post request on media endpoint. Pass file data as media parameter
            client.post('media/upload', {media: data}, function (error, media, response) {
                if (!error) {
                    // If successful, a media object will be returned.                            // Lets tweet it
                    var status = {
                        status   : 'I am a tweet',
                        media_ids: media.media_id_string // Pass the media id string
                    }
                    client.post('statuses/update', status, function (error, tweet, response) {
                        if (!error) {
                            console.log(tweet);
                    });
                }
            });
        });
    });

如何直接将ReadingStream连接到POST请求?

1 个答案:

答案 0 :(得分:1)

直接使用response,这已经是一个可读流,而不是写/读一个临时文件:

https.get(wineTweet.label, function(res) {
  // Make post request on media endpoint. Pass file data as media parameter
  client.post('media/upload', {media: res}, function(error, media, response) {
    if (!error) {
      // If successful, a media object will be returned.                            // Lets tweet it
      var status = {
        status   : 'I am a tweet',
        media_ids: media.media_id_string // Pass the media id string
      };
      client.post('statuses/update', status, function(error, tweet, response) {
        if (!error)
          console.log(tweet);
      });
    }
  });
});

在不相关的说明中, 应该正确处理错误而不是忽略错误。