首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用nodejs将媒体发布到twitter api

无法使用nodejs将媒体发布到twitter api
EN

Stack Overflow用户
提问于 2019-08-05 03:36:33
回答 1查看 488关注 0票数 0

好了,我有一个express服务器,我正在使用media/upload将图片发布到推特上。

代码语言:javascript
复制
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表示它无法匹配该媒体类型:确切的错误消息:

代码语言:javascript
复制
 "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

工作代码片段:

代码语言:javascript
复制
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编码的字符串,但我也提供了,它也会出错。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-05 09:36:32

data:image/jpeg;base64需要从数据中删除,以便推特接受它,这在他们的应用程序接口中没有任何地方记录。

您可以使用以下命令完成此操作

var base64Data = encodedImage.replace(/^data:image\/jpg;base64,/, "");

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57349664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档