Загрузка блоб-URL в Imgur? - PullRequest
       19

Загрузка блоб-URL в Imgur?

0 голосов
/ 17 октября 2018

Я пытаюсь загрузить URL-адрес блоба в imgur api:

https://apidocs.imgur.com/#c85c9dfc-7487-4de2-9ecd-66f727cf3139

в документах четко сказано, что это может быть: binary file или base64 или url

Мой URL (пример): blob:http://localhost:8080/7e44709-093d-4a4-b167-a3fdfc63a8e

formData.append('image', 'blob:http://localhost:8080/7e44709-093d-4a4-b167-a3fdfc63a8e');
formData.append('type', 'URL');

Однако я получаю 400 ошибку от imgur api, что:

{"data":{"error":
"Invalid URL (blob:http:\/\/localhost:8080\/7e44729-093d-4aa4-167-a3fdef3a8e)",
"request":"\/3\/image","method":"POST"},"success":false,"status":400}

Жду помощи, почемуне получится и как его правильно загрузить.Спасибо

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Поскольку API принимает двоичный файл, вы можете отправить BLOB-объект, который вы использовали для создания этого blobURI (тот, который вы должны были передать URL.createObjectURL , поскольку это единственный метод, способный генерировать такой URI).

formData.append('image', the_original_blob);
formData.append('type', 'file');

Если вы не несете ответственности за код, создавший этот blobURI , у вас возникла проблема.

  • вы можете проверить этот ответ , который предоставляет обезьяну-патч для URL методов, чтобы мы могли получить BLOB-объект, на который они указывают,
  • , или вы можете снова получить этот BLOBURI как Blob (большее использование памяти, новсе же немного меньше, чем проходить через base64).
0 голосов
/ 17 октября 2018

Изображение необходимо преобразовать в base64, а затем из base64 в двоичный файл.Это делается с помощью .toDataURL() и dataURItoBlob()

Img => Base64 => Binary

function imgToURI() {
  // Convert image to Base64
  var img = snap.toDataURL();
  // Convert Base64 image to binary
  var file = dataURItoBlob(img);
}

function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
    byteString = atob(dataURI.split(',')[1]);
else
    byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}

Вы можете остановиться на base64, если это все, что вам нужно, в моем случае мне нужно было снова преобразовать в двоичный файл, чтобы я мог передать данные в твиттер (используя OAuth)без использования БД.Оказывается, вы можете твитнуть бинарный файл, который очень крутой, твиттер преобразует его обратно в изображение.

Я создал пост в блоге об этом несколько лет назад

...