Как использовать метод readAsArrayBuffer из FileReader после выборки и получить правильный размер? - PullRequest
0 голосов
/ 27 августа 2018

Я хочу получить доступ к ArrayBuffer с удаленного URL. Итак, я создал функцию:

        fetch('some url')
            .then(function(response) {
                const file = new File([response], response.url, {type:'image/jpg'});
                const reader = new FileReader();
                reader.readAsArrayBuffer(file);
                reader.onload = function(e) {
                    const dataURL = reader.result;
                    console.log(dataURL);
                };
            })

И у меня неправильный размер ArrayBuffer: ArrayBuffer (17 = длина моего URL) вместо реального размера изображения (я думаю, около 24000). В чем здесь проблема?

1 Ответ

0 голосов
/ 27 августа 2018

Если вы набираете ArrayBuffer запрошенного ресурса, вырежьте посредника File и просто получите ответ, который даст вам буфер прямо с Body.arrayBuffer().

const url = "data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";

fetch(url)
  .then(res => res.arrayBuffer())
  .then(someBuffer => {
    console.log(someBuffer.byteLength);
  });

Изображение в кодировке base64, использованное в приведенном выше коде, пришло из этого ответа здесь: Как отобразить изображения Base64 в HTML? .

...