Я изучал Blob-объекты и заметил, что когда у вас есть ArrayBuffer, вы можете легко преобразовать его в Blob следующим образом:
var dataView = new DataView(arrayBuffer);
var blob = new Blob([dataView], { type: mimeString });
У меня сейчас вопрос: можно ли перейти от Blob к ArrayBuffer?
javascript
blob
arraybuffer
Жанлука Скальери
источник
источник
Blob
нельзя прочитать напрямую, но это можно сделать с помощью некоторых API.Ответы:
Response
API потребляет (неизменное) ,Blob
из которого данные могут быть получены несколькими способами. OP только просилArrayBuffer
, а вот демонстрация этого.в качестве альтернативы вы можете использовать это:
источник
Blob.arrayBuffer()
которым на самом деле имеет довольно плохую совместимость даже в 2020 году, caniuse.com/#feat=mdn-api_blob_arraybuffer или developer.mozilla.org/en-US/docs/Web/API/Blob/arrayBufferВы можете использовать
FileReader
для чтенияBlob
какArrayBuffer
.Вот небольшой пример:
Вот более длинный пример:
Это было протестировано в консоли Chrome 27–69, Firefox 20–60 и Safari 6–11.
Вот также живая демонстрация, с которой вы можете поиграть: https://jsfiddle.net/potatosalad/FbaM6/
Обновление 2018-06-23: Спасибо Клаусу Кляйну за совет о
event.target.result
сравненииthis.result
Ссылка:
источник
this
.<EventTarget>.result
должен это исправить!Просто чтобы дополнить ответ г-на @potatosalad.
Вы на самом деле не нужно , чтобы получить доступ к функции сферы , чтобы получить результат на OnLoad обратного вызова, вы можете свободно сделать следующее на событие параметра:
Почему так лучше? Потому что тогда мы можем использовать стрелочную функцию без потери контекста
источник
Или вы можете использовать API выборки
Я не знаю, в чем разница в производительности, и это также будет отображаться на вкладке вашей сети в DevTools.
источник
new Response(blob).arrayBuffer()
Существует в настоящее время (& FF 69+ хром 76+) а Blob.prototype.arrayBuffer () метод , который будет возвращать Promise решения с ArrayBuffer , представляющей данные сгустка в.
источник
await blob.arrayBuffer()
это хорошо.Проблема в том, что нужна поддержка iOS / Safari .. для этого понадобится следующее :
источник