Ответ: метод arrayBuffer()
Базовая версия Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2017 года.
Примечание: Эта функция доступна в Потоках Web Workers.
Метод arrayBuffer() интерфейса Response принимает поток Response и считывает его до конца. Он возвращает промис, который разрешается с ArrayBuffer.
Синтаксис
arrayBuffer()
Параметры
Нет.
Возвращаемое значение
Промис, который разрешается с ArrayBuffer.
Исключения
-
DOMExceptionAbortError -
Запрос был отменён.
TypeError-
Выбрасывается по одной из следующих причин:
- Тело ответа повреждено или заблокировано.
- Произошла ошибка при декодировании содержимого тела (например, из-за неверного заголовка
Content-Encoding).
RangeError-
Возникла проблема при создании связанного
ArrayBuffer. Например, если размер данных превышаетNumber.MAX_SAFE_INTEGER.
Примеры
Проигрывание музыки
В нашем примере загрузки данных в формате arrayBuffer, у нас есть кнопка Play. При нажатии на неё вызывается функция getData(). Обратите внимание, что перед воспроизведением весь аудиофайл будет загружен. Если необходимо воспроизводить ogg во время загрузки (транслировать его) - рассмотрите HTMLAudioElement:
new Audio("music.ogg").play();
В getData() мы создаём новый запрос с помощью конструктора Request(), затем используем его для загрузки музыкального трека в формате OGG. Мы также используем AudioContext.createBufferSource для создания источника аудио буфера. Когда загрузка завершена успешно, мы считываем ArrayBuffer из ответа с помощью arrayBuffer(), декодируем аудиоданные с помощью AudioContext.decodeAudioData(), устанавливаем декодированные данные в качестве буфера источника аудио (source.buffer), затем подключаем источник к AudioContext.destination.
После того, как getData() завершится, мы запускаем воспроизведение источника звука с помощью start(0), затем отключаем кнопку воспроизведения, чтобы её нельзя было нажать ещё раз, когда она уже воспроизводится (это вызовет ошибку).
function getData() {
const audioCtx = new AudioContext();
return fetch("viper.ogg")
.then((response) => {
if (!response.ok) {
throw new Error(`HTTP error, status = ${response.status}`);
}
return response.arrayBuffer();
})
.then((buffer) => audioCtx.decodeAudioData(buffer))
.then((decodedData) => {
const source = new AudioBufferSourceNode(audioCtx);
source.buffer = decodedData;
source.connect(audioCtx.destination);
return source;
});
}
// wire up buttons to stop and play audio
play.onclick = () => {
getData().then((source) => {
source.start(0);
play.setAttribute("disabled", "disabled");
});
};
Чтение файлов
Конструктор Response() принимает File и Blob, поэтому он может использоваться для чтения File в другие форматы.
function readFile(file) {
return new Response(file).arrayBuffer();
}
<input type="file" onchange="readFile(this.files[0])" />
Спецификации
| Спецификация |
|---|
| Fetch # ref-for-dom-body-arraybuffer① |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
arrayBuffer |
42 | 14 | 39 | 29 | 10.1 | 42 | 39 | 29 | 10.3 | 4.0 | 42 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Response/arrayBuffer