Mam wiele problemów z adresem URL obiektu blob.
Szukałem src
tagu wideo na YouTube i odkryłem, że film src
był podobny do:
src="blob:https://crap.crap"
Otworzyłem adres URL obiektu blob, który był w src
filmie, w którym wystąpił błąd. Nie mogę otworzyć linku, ale działał z src
tagiem. Jak to jest możliwe?
Wymagania:
- Co to jest adres URL obiektu blob?
- Dlaczego jest używany?
- Czy mogę utworzyć własny adres URL obiektu blob na serwerze?
- Jeśli masz dodatkowe informacje
html5-video
bloburls
Waqas Tahir
źródło
źródło
Odpowiedzi:
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 .
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).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.
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.
Musisz obudować dane binarne jako obiekt BLOB, a następnie użyć
URL.createObjectURL()
do wygenerowania lokalnego adresu URL:Pamiętaj, że
URL
może być prefiksem w przeglądarkach internetowych, więc użyj:źródło
Ta funkcja Javascript ma na celu pokazać różnicę między interfejsem API pliku Blob a interfejsem API Data w celu pobrania pliku JSON w przeglądarce klienta:
Funkcja nazywa się jak
saveAsFile('out.json', jsonString);
. Stworzy ByteStream natychmiast rozpoznany przez przeglądarkę, która pobierze wygenerowany plik bezpośrednio za pomocą interfejsu API FileURL.createObjectURL
.W polu
else
można zobaczyć ten sam wynik uzyskany przezhref
element plus Data API, ale ma to kilka ograniczeń, których nie ma interfejs Blob API.źródło
Co to jest adres URL obiektu blob? Dlaczego jest używany?
BLOB jest sekwencją bajtów. Przeglądarka rozpoznaje go jako strumień bajtów. Służy do pobierania strumienia bajtów ze źródła.
Czy mogę utworzyć własny adres URL obiektu blob na serwerze?
Tak, możesz to zrobić na wiele sposobów, na przykład spróbuj http://php.net/manual/en/function.ibase-blob-echo.php
Czytaj więcej na
źródło
Zmodyfikowałem działające rozwiązanie, aby poradzić sobie zarówno z tym przypadkiem .. gdy przesyłany jest film, jak i gdy przesyłany jest obraz .. mam nadzieję, że to pomoże.
HTML
JavaScript
jsFiddle Url
https://jsfiddle.net/PratapDessai/0sp3b159/
źródło