好了,我有一个express服务器,我正在使用media/upload将图片发布到推特上。
app.post('/api/post-picture', (req, res) =>{
client.post('media/upload', {"media": data}, // Here lies the problem
function(error, media, response) {
if (!error) {
client.post('statuses/update', {
status: 'TEST PICTURE',
media_ids: media.media_id_string
}, function(error, tweet, response){
if(!error){
res.json({status: 'success'})
}else{
res.json({error: response})
}
})
}else{
res.json({error: response})
}
});
});在我的req.body.media中,我有一个base64编码的字符串,我正在发送到我的express服务器。然后我将base64编码的图像转换回原始的二进制数据:“
var buf = Buffer.from(req.body.media, 'base64');
然后我将buf变量传递给
client.post('media/upload', {"media": buf},
出于某种奇怪的原因,twitters api表示它无法匹配该媒体类型:确切的错误消息:
"body": "{\"request\":\"\\/1.1\\/media\\/upload.json\",\"error\":\"media type unrecognized.\"}"他们的api说:“媒体应该是被上传的原始二进制文件内容”
我在这里做错了什么?
https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload.html
工作代码片段:
app.post('/api/post-picture', (req, res) =>{
// var encodedimage = Buffer.from(data).toString('base64')
var buf = Buffer.from(req.body.media.toString(), 'base64');
client.post('media/upload', {"media": buf},
function(error, media, response) {
if (!error) {
client.post('statuses/update', {
status: 'TEST PICTURE',
media_ids: media.media_id_string
}, function(error, tweet, response){
if(!error){
res.json({status: 'success'})
}else{
res.json({error: response})
}
})
}else{
res.json({error: response})
}
});
});Twitters api也接受base64编码的字符串,但我也提供了,它也会出错。
发布于 2019-08-05 09:36:32
data:image/jpeg;base64需要从数据中删除,以便推特接受它,这在他们的应用程序接口中没有任何地方记录。
您可以使用以下命令完成此操作
var base64Data = encodedImage.replace(/^data:image\/jpg;base64,/, "");
https://stackoverflow.com/questions/57349664
复制相似问题