【问题标题】:Twitter API: media/upload 400 Bad Request: media type unrecognizedTwitter API:媒体/上传 400 错误请求:媒体类型无法识别
【发布时间】:2018-10-20 01:53:14
【问题描述】:

所以我有一个网站,用户可以在其中上传图像文件(我一直在使用 113KB 的 PNG 文件进行测试)。点击提交按钮后,图像数据被编码为 base64,然后以 POST 请求正文中的 JSON 格式发送到 Heroku 上托管的 node.js 服务器。然后服务器获取图像数据并解析 JSON。然后,我使用节点模块twitter 从heroku 服务器向media/upload 端点进行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 的结果。关于如何在不使用它的情况下做到这一点的任何想法?

【问题讨论】:

    标签: javascript node.js api twitter


    【解决方案1】:

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

    在发布base64编码的图片时,一定要在消息的图片部分设置“Content-Transfer-Encoding: base64”。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2015-03-06
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多