Отправка «двоичного файла» с AngularJS - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь загрузить «двоичный файл» из моего приложения cordova в imgur.com REST API с помощью AngularJS.

Но я не уверен, как мне следует форматироватьмой запрос и что такое "бинарный файл"Из того, что я понимаю, бинарный файл - это любая вещь, которая не является простым текстом.

Так я получаю данные файла из локальной файловой системы.Возвращает экземпляр BLOB-объекта.Эта часть работает нормально.

var request = {
  'url': 'file:///my/path/tmp/cdv_photo_025.png',
  'options': {
    'responseType': 'blob' // also tried 'arraybuffer', no diff.
  }
}
var handler = function(response) {
  window.myBlobData = response.data;
  // handles the response
}
$http.get(request.url, request.options).then(handler);

Затем, позже, я использую это, чтобы загрузить большой двоичный объект в imgur, но это не работает.Я получаю 400 (плохой запрос).Я предполагаю, что тип содержимого, отключение автоматической кодировки AngularJS делает с transformRequest, и, конечно, двоичные данные:

var request = {
  'url': 'https://api.imgur.com/3/upload',
  'options': {
    'headers': {
      'Authorization': 'Client-ID ***********',
      'Content-Type': 'application/octet-stream',
    },
    'transformRequest': []
  },
  'data': {
    'image': window.myBlobData, // a binary file
    'type': 'image/png'
  }
}
var handler = function(response) {
  // handles the response
}
$http.post(request.url, request.data, request.options).then(handler);

1 Ответ

0 голосов
/ 15 сентября 2018

Для запроса загрузки изображения с помощью API Imgur вы не можете просто включить Client-ID в заголовок. Если бы вы вместо этого запрашивали общедоступную информацию только для чтения, то этого было бы достаточно.

Если вы этого еще не сделали, обратитесь к разделу по авторизации в документации Imgur API.

Как правило, вам необходимо получить токен доступа для пользователя, для которого вы будете загружать изображения от имени. Как указано в документации, вам нужно перенаправить или открыть всплывающее окно по указанному ниже URL-адресу.

https://api.imgur.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=access_token

Затем, как только вы получите токен доступа, убедитесь, что ваши запросы на загрузку используют его:

'Authorization': 'Bearer access_token'

Кроме того, просто используйте данные BLOB-объектов в качестве аргумента для запроса (т. Е. Не оборачивайте их свойствами image и type).

...