Первая проблема заключается в том, что вы получаете Error: HTTP Error: 400 Bad Request
- данные, которые вы получаете fs.readFileSync
- это необработанный двоичный файл , а не файл в кодировке base64 . Ссылка API на Twitter гласит:
media : загружается необработанный двоичный файл. Не может использоваться с media_data
media_data : загружается содержимое файла в кодировке base64. Не может использоваться с media
POST media / upload> Параметры
Таким образом, вы должны использовать параметр media
для передачи файла вместо media_data
.
Вторая проблема, которую ваша цепочка обещаний при попытке использовать подход chunked-upload немного проблематична, и на самом деле она должна выглядеть так:
client.post('media/upload', {
command: 'INIT',
total_bytes: gifSize,
media_type: contentType
}).then((response) => {
mediaIdString = response.media_id_string;
client.post('media/upload', {
command: 'APPEND',
media_id: mediaIdString,
media: gifFile,
segment_index: 0
}).then((response) => {
client.post('media/upload', {
command: 'FINALIZE',
media_id: mediaIdString,
}).then((response) => {
console.log(response);
console.log('UPLOAD SUCCESSFUL');
});
});
});
Я думаю, что вы пытались написать обещание водопада , но я считаю, что в этом случае он работает не очень хорошо, или если он работает, то для его написания требуется еще больше кода, и вообще никакой разницы в производительности .
Кроме того, в twitter пакета README.md нет упоминания о команде STATUS
, поэтому кажется, что STATUS
не поддерживается этой библиотекой.