所以我有一个用户上传图像文件的网站(我已经使用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
的结果。关于如何在不使用它的情况下做到这一点的任何想法?
答案 0 :(得分:0)
the docs的细则中有一点可能会有所帮助:
发布base64编码图像时,请务必在邮件的图像部分设置“Content-Transfer-Encoding:base64”。
API文档并不是最好的。示例中有media_type
,但可以肯定:
client.post
在twitter.js来电__request
params
__request
不设置标题如果您将post
的通话中的参数从{media_data: data}
更改为{media: data}
,是否有效?如果没有,似乎设置标题的唯一方法是打开PR或在初始化客户端时尝试将它们作为默认值:Twitter(options)
。已经设置了一些标题here。
仅供参考 - 我已经为你开了一个GitHub问题。加入对话! https://github.com/desmondmorris/node-twitter/issues/292