1

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

4

1 回答 1

0

文档的细则中有一点可能会有所帮助:

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

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

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

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

于 2018-05-10T03:45:34.127 回答