В чем разница между input `file.stream ()` и `response.body`, если я хочу получить поток только в HTML? - PullRequest
0 голосов
/ 05 мая 2020

Пожалуйста, посмотрите этот минимальный пример:

Я хочу получить поток файла mp3, я нашел два способа сделать это, я не понимаю, какой из них мне следует используйте.

  1. file.stream() можно получить поток файлов
  2. передать файл createObjectURL и fetch URL-адрес, и я могу получить поток из response.body

Они идентичны?

Какой из них лучше, если я хочу получить только поток?

const input = document.querySelector("input");

input.addEventListener("change", async () => {
  const file = input.files[0];
  const response = await fetch(window.URL.createObjectURL(file));

  console.log("Stream from fetch response body", response.body);
  console.log("Stream from file.stream()", file.stream());
});
<input type="file" accept="audio/mp3" />

1 Ответ

1 голос
/ 05 мая 2020

Используйте file.stream, потому что у вас уже есть доступный объект File.

Не используйте createObjectURL (т.е. ваш пример с fetch), если у вас уже есть File или Stream доступно, потому что вы просто создаете ненужную работу для браузера.

(я предполагаю, что JavaScript не определяет время жизни или как управлять состоянием, внешние ресурсы, которые браузеры могут создавать «безопасные» копии данных в этом случае, вместо того, чтобы Response 'Stream совместно использовали один и тот же базовый байтовый буфер) .

Как вам интересно : функция createObjectURL используется для генерации строкового URI , который можно передать другим объектам, которые не могут работать с объектом Stream или File, например, <video> элемента * Атрибут 1023 * - это то, как вы можете мгновенно показать предварительный просмотр файла изображения или видео из <input type="file" /> без необходимости делать что-либо неэффективное, например, использовать кодированный Base64 data: URI или сначала загрузить файл на свой веб-сервер. .

Кроме того, когда вы используете createObjectURL, у вас есть для вызова revokeObjectURL(), иначе у вас будет утечка памяти в вашем браузере, пока ваша страница не будет выгружена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...