Adresy URL obiektów blob (ref. W3C , oficjalna nazwa) lub URL-e obiektów (ref. MDN i nazwa metody) są używane z obiektem Blob lub File .
src = "blob: https: //crap.crap " Otworzyłem adres URL blob, który był w src wideo, dał błąd i nie mogę go otworzyć, ale działałem z tagiem src, jak to możliwe?
Adresy URL obiektów blob mogą być generowane tylko wewnętrznie przez przeglądarkę. URL.createObjectURL()
utworzy specjalne odwołanie do obiektu Blob lub File, który później można zwolnić za pomocą URL.revokeObjectURL()
. Te adresy URL mogą być używane lokalnie tylko w jednym wystąpieniu przeglądarki i w tej samej sesji (tj. W czasie życia strony / dokumentu).
Co to jest adres URL obiektu blob?
Dlaczego jest używany?
Adres URL obiektu Blob / URL obiektu to pseudo protokół, który umożliwia stosowanie obiektów obiektów Blob i plików jako źródła adresu URL dla takich rzeczy, jak obrazy, łącza pobierania danych binarnych i tak dalej.
Na przykład nie można przekazać surowego bajtu danych obiektowi Image, ponieważ nie wiedziałby, co z nim zrobić. Wymaga na przykład ładowania obrazów (które są danymi binarnymi) za pośrednictwem adresów URL. Dotyczy to wszystkiego, co wymaga adresu URL jako źródła. Zamiast przesyłać dane binarne, a następnie podawać je z powrotem za pomocą adresu URL, lepiej skorzystać z dodatkowego lokalnego kroku, aby uzyskać dostęp do danych bezpośrednio, bez konieczności przechodzenia przez serwer.
Jest to także lepsza alternatywa dla Data-URI, które są łańcuchami kodowanymi jako Base-64 . Problem z Data-URI polega na tym, że każdy znak zajmuje dwa bajty w JavaScript. Ponadto 33% jest dodawane ze względu na kodowanie Base-64. Obiekty BLOB są czystymi binarnymi tablicami bajtowymi, które nie mają znaczącego obciążenia, podobnie jak identyfikator URI danych, co czyni je szybszymi i mniejszymi w obsłudze.
Czy mogę utworzyć własny adres URL obiektu blob na serwerze?
Nie, adresy URL obiektów Blob / URL obiektów można tworzyć tylko wewnętrznie w przeglądarce. Możesz tworzyć obiekty BLOB i pobierać obiekt File za pomocą interfejsu API czytnika plików, chociaż BLOB oznacza po prostu duży obiekt binarny i jest przechowywany jako tablice bajtów. Klient może zażądać przesłania danych jako ArrayBuffer lub jako obiekt Blob. Serwer powinien wysłać dane jako czyste dane binarne. Bazy danych często używają obiektu Blob również do opisywania obiektów binarnych, i zasadniczo mówimy w zasadzie o tablicach bajtowych.
jeśli masz, to dodatkowe szczegóły
Musisz obudować dane binarne jako obiekt BLOB, a następnie użyć URL.createObjectURL()
do wygenerowania lokalnego adresu 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
Pamiętaj, że URL
może być prefiksem w przeglądarkach internetowych, więc użyj:
var url = (URL || webkitURL).createObjectURL(...);