Twitter API: media / upload 400 Bad Request: тип мультимедиа не распознан - PullRequest
0 голосов
/ 09 мая 2018

Итак, у меня есть веб-сайт, на котором пользователь загружает файл изображения (я тестировал файл PNG размером 113 КБ). После нажатия кнопки отправки данные изображения кодируются в base64, а затем отправляются на сервер node.js, размещенный на heroku в JSON в теле запроса POST. Затем сервер берет данные изображения и анализирует JSON. Затем я делаю POST с сервера heroku на конечную точку media/upload, используя модуль узла, 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. Любые идеи о том, как я могу сделать это без его использования?

1 Ответ

0 голосов
/ 10 мая 2018

В мелком шрифте есть документы , которые могут помочь:

При публикации изображений в кодировке base64 обязательно установите «Content-Transfer-Encoding: base64» в части изображения сообщения.

Документация по API не самая лучшая. В примерах есть media_type, но чтобы быть уверенным:

  • client.post в twitter.js звонки __request с params
  • __request делает не устанавливает заголовок

Работает ли это, если вы измените параметры в вашем вызове на post с {media_data: data} на {media: data}? Если нет, то кажется, что единственный способ установить заголовки - это либо открыть PR, либо попытаться предоставить их по умолчанию при инициализации клиента: Twitter(options). Уже есть несколько заголовков, установленных здесь .

К вашему сведению - я открыл для вас выпуск GitHub. Присоединиться к разговору! https://github.com/desmondmorris/node-twitter/issues/292

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...