URL-адреса BLOB- объектов (ref W3C , официальное имя) или URL-адреса объектов (ref. MDN и имя метода) используются с объектами Blob или File .
src = "blob: https: //crap.crap " Я открыл URL-адрес блоба, который был в src видео, он выдал ошибку, и я не могу открыть, но работал с тегом src, как это возможно?
URL-адреса BLOB-объектов могут создаваться только внутри браузера. URL.createObjectURL()
создаст специальную ссылку на объект Blob или File, который позже может быть освобожден с помощью URL.revokeObjectURL()
. Эти URL-адреса могут использоваться только локально в одном экземпляре браузера и в одном сеансе (т. Е. В жизни страницы / документа).
Что такое BLOB-URL?
Почему это используется?
Blob URL / Object URL - это псевдопротокол, позволяющий использовать объекты Blob и File в качестве источника URL для таких вещей, как изображения, ссылки для загрузки двоичных данных и т. Д.
Например, вы не можете передать необработанные байтовые данные объекта Image, поскольку он не знает, что с ним делать. Это требует, например, изображения (которые являются двоичными данными) для загрузки через URL-адреса. Это относится ко всему, что требует URL в качестве источника. Вместо того, чтобы загружать двоичные данные, а затем отправлять их обратно через URL, лучше использовать дополнительный локальный шаг, чтобы иметь доступ к данным напрямую, без прохождения через сервер.
Это также лучшая альтернатива Data-URI, которые представляют собой строки, закодированные как Base-64 . Проблема с Data-URI состоит в том, что каждый символ занимает два байта в JavaScript. Кроме того, добавляется 33% из-за кодировки Base-64. BLOB-объекты - это чистые двоичные байтовые массивы, которые не имеют значительных издержек, как Data-URI, что делает их более быстрыми и меньшими для обработки.
Могу ли я сделать свой собственный URL-адрес BLOB-объекта на сервере?
Нет, URL-адреса BLOB-объектов / URL-адреса объектов могут создаваться только внутри браузера. Вы можете создавать BLOB-объекты и получать объект File с помощью API-интерфейса File Reader, хотя BLOB означает просто Binary Large OBject и хранится в виде байтовых массивов. Клиент может запросить отправку данных как ArrayBuffer или как BLOB-объект. Сервер должен отправлять данные в виде чистых двоичных данных. Базы данных часто используют Blob для описания двоичных объектов, и, по сути, речь идет в основном о байтовых массивах.
если у вас есть, то дополнительная информация
Вам необходимо инкапсулировать двоичные данные как объект BLOB, а затем использовать URL.createObjectURL()
для создания локального URL-адреса для него:
var blob = new Blob([arrayBufferWithPNG], {type: "image/png"}),
url = URL.createObjectURL(blob),
img = new Image();
img.onload = function() {
URL.revokeObjectURL(this.src); // clean-up memory
document.body.appendChild(this); // add image to DOM
}
img.src = url; // can now "stream" the bytes
Обратите внимание, что URL
может иметь префикс в браузерах webkit, поэтому используйте:
var url = (URL || webkitURL).createObjectURL(...);