javascript - 推特 API : media/upload 400 Bad Request: media type unrecognized

标签 javascript node.js api twitter

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

最佳答案

the docs 的细则中有一个小注释。这可能有帮助:

When posting base64 encoded images, be sure to set the “Content-Transfer-Encoding: base64” on the image part of the message.

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

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

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

关于javascript - 推特 API : media/upload 400 Bad Request: media type unrecognized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50261958/

相关文章:

javascript - setTimeout 在 Node.js 中等待时间过长

ruby - 无法通过 ruby​​ API 插入新的 Google 日历事件,提醒错误

javascript - 如何附加到 javascript 中的现有正则表达式?

javascript - 解析具有同一索引上的多个键的对象

javascript - 如何使用 jQuery 修改属性 ROWSPAN?

javascript - gulp.src 基本选项应用于一个数组项

javascript - HTML 中的 CDATA 是什么?

javascript - 如何从 JavaScript 渲染的网页下载?

php - 使用 Slim Framework 创建 OR 功能

api - 多个端点以公开同一资源的不同 View