【问题标题】:Uploading image to Twitter via Node.js results in HTTP error 400 (bad request)通过 Node.js 将图像上传到 Twitter 会导致 HTTP 错误 400(错误请求)
【发布时间】:2019-11-12 08:45:57
【问题描述】:

我正在尝试通过在某个 Discord 频道中发送图片来将图片上传到 Twitter。这是我正在使用的代码:

var number = 0;

function downloadJPG(url) { //This function downloads the image in jpg format
    request.get(url).on('error', console.error).pipe(fs.createWriteStream('image.jpg'));
}

if (message.attachments.every(attachIsImageJPG)) {
      downloadJPG(message.attachments.first().url);
      var imageToPostJPG = fs.readFileSync('image.jpg');
      client.post('media/upload', {media: imageToPostJPG}, function(err, data, res) {
    if (err) console.log(err);
    console.log(data);
    number = number+1
    client.post('statuses/update', {status: 'Success Cop #'+number, media_ids: data.media_id_string}, function(err, params, res) {
        if (err) console.log(err);
        console.log(params);
        });
    });
}

图像应该与状态一起上传到 Twitter,但只有状态被上传,这就是我在控制台中看到的:

Error: HTTP Error: 400 Bad Request
    at Request._callback (C:\Users\Silvano\Desktop\Twitter\node_modules\twitter\lib\twitter.js:221:9)
    at Request.self.callback (C:\Users\Silvano\Desktop\Twitter\node_modules\request\request.js:185:22)
    at Request.emit (events.js:200:13)
    at Request.<anonymous> (C:\Users\Silvano\Desktop\Twitter\node_modules\request\request.js:1161:10)
    at Request.emit (events.js:200:13)
    at IncomingMessage.<anonymous> (C:\Users\Silvano\Desktop\Twitter\node_modules\request\request.js:1083:12)
    at Object.onceWrapper (events.js:288:20)
    at IncomingMessage.emit (events.js:205:15)
    at endReadableNT (_stream_readable.js:1154:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:9)
{
  request: '/1.1/media/upload.json',
  error: 'media type unrecognized.'
}

如何解决此错误并同时上传图片?

【问题讨论】:

    标签: javascript node.js twitter discord discord.js


    【解决方案1】:

    我认为问题在于流必须在readFileSync 读取之前完成。

    // modified to indicate completion by calling callback
    function downloadJPG(url, callback) { //This function downloads the image in jpg format
      let stream = request.get(url).on('error', console.error).pipe(fs.createWriteStream('image.jpg'));
      stream.on('finish', callback);
    }
    
    // modified to do the twtr work in the callback
    if (message.attachments.every(attachIsImageJPG)) {
        downloadJPG(message.attachments.first().url, function() {
            var imageToPostJPG = fs.readFileSync('image.jpg');
            client.post('media/upload', {media: imageToPostJPG}, function(err, data, res) {
            if (err) console.log(err);
            console.log(data);
            number = number+1
            client.post('statuses/update', {status: 'Success Cop #'+number, media_ids: data.media_id_string}, function(err, params, res) {
                if (err) console.log(err);
                console.log(params);
                });
            });
        });
    }
    

    旁注:我发现经过一两个步骤后,回调样式太难写和读了,而promise更可取。

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      相关资源
      最近更新 更多