Twitter API:媒体/上传400错误请求:媒体类型无法识别

时间:2018-05-09 20:59:16

标签: javascript node.js api twitter

所以我有一个用户上传图像文件的网站(我已经使用113KB的PNG文件进行了测试)。点击提交按钮后,图像数据被编码到base64中,然后被发送到在POST请求正文中的JSON中托管在heroku上的node.js服务器。然后,服务器获取图像数据并解析JSON。然后,我使用节点模块media/upload从heroku服务器发送到twitter端点的POST。我已尝试使用它发布有效的常规状态,因此它不是身份验证问题。在twitter模块的文档示例中,他们执行此操作(原始二进制文件,而不是base64):

var data = require('fs').readFileSync('image.jpg');
client.post('media/upload', {media: data}, function(error, media, response) { ... }

但是,按照我的方式,我实际上无法读取文件 - 我所拥有的只是来自JSON字符串的编码数据。无论如何,这就是我所拥有的:

...
let data = JSON.parse(req.rawBody).imageb64;
//console.log(data);
client.post('media/upload', {media_data: data}, function(error, media, response) {

  if (!error) {
    console.log(media);
    var status = {
      status: 'api test',
      media_ids: media.media_id_string
    }

    client.post('statuses/update', status, function(error, tweet, response) {
      if (!error) {
        console.log(tweet);
      }
    });

  }  else {
    console.log(response)
  }
});

我怀疑问题是因为我传入了数据而不是readFileSync的结果。关于如何在不使用它的情况下做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

the docs的细则中有一点可能会有所帮助:

  

发布base64编码图像时,请务必在邮件的图像部分设置“Content-Transfer-Encoding:base64”。

API文档并不是最好的。示例中有media_type,但可以肯定:

如果您将post的通话中的参数从{media_data: data}更改为{media: data},是否有效?如果没有,似乎设置标题的唯一方法是打开PR或在初始化客户端时尝试将它们作为默认值:Twitter(options)。已经设置了一些标题here

仅供参考 - 我已经为你开了一个GitHub问题。加入对话! https://github.com/desmondmorris/node-twitter/issues/292