Moja strona generuje następujący adres URL: "blob:http%3A//localhost%3A8383/568233a1-8b13-48b3-84d5-cca045ae384f"
Jak mogę przekonwertować go na zwykły adres?Konwersja adresu URL blobu na zwykły URL
Używam go jako atrybutu 'src
.
Moja strona generuje następujący adres URL: "blob:http%3A//localhost%3A8383/568233a1-8b13-48b3-84d5-cca045ae384f"
Jak mogę przekonwertować go na zwykły adres?Konwersja adresu URL blobu na zwykły URL
Używam go jako atrybutu 'src
.
Adres URL utworzony na podstawie kodu JavaScript Blob
nie może zostać przekonwertowany na "normalny" adres URL.
Adres URL nie odnosi się do danych, które istnieją na serwerze, dotyczy danych, które przeglądarka ma aktualnie w pamięci dla bieżącej strony. Nie będzie dostępny na innych stronach, nie będzie dostępny w innych przeglądarkach i nie będzie dostępny na innych komputerach.
Dlatego ogólnie nie ma sensu przekształcanie adresu URL z adresu URL na "zwykły" adres URL na Blob
. Jeśli chcesz mieć zwykły adres URL, musisz przesłać dane z przeglądarki do serwera i udostępnić serwer jak zwykły plik.
Możliwe jest przekształcenie adresu URL blob:
w adres URL data:
, przynajmniej w Chrome. Możesz użyć żądania AJAX, aby "pobrać" dane z adresu URL blob:
(chociaż tak naprawdę to tylko wyciągnięcie go z pamięci przeglądarki, bez wysyłania żądania HTTP).
Oto przykład:
var blob = new Blob(["Hello, world!"], { type: 'text/plain' });
var blobUrl = URL.createObjectURL(blob);
var xhr = new XMLHttpRequest;
xhr.responseType = 'blob';
xhr.onload = function() {
var recoveredBlob = xhr.response;
var reader = new FileReader;
reader.onload = function() {
var blobAsDataUrl = reader.result;
window.location = blobAsDataUrl;
};
reader.readAsDataURL(recoveredBlob);
};
xhr.open('GET', blobUrl);
xhr.send();
data:
adresy URL nie są prawdopodobnie co masz na myśli przez "normalne" i może być problematycznie duża. Jednak działają tak, jak zwykłe adresy URL, dzięki czemu można je udostępniać; nie są one specyficzne dla bieżącej przeglądarki lub sesji.
Jeśli adresy URL obiektów blob nie wskazują danych serwera, to jak wygląda adres URL src z YouTube: src = "blob: https% 3A // www.youtube.com/44f26667-03f1-4978-9eed-af0cbf11dd67 " (w Chrome) – bhh1988
@ bhh1988 To bardzo interesujące znalezisko. Nie jestem pewien, co się tam dzieje. Jeśli spróbuję pobrać ich adres URL blobu src za pomocą XMLHttpRequest, jak opisano w tym poście, żadna treść nie jest zwracana. Domyślam się, że albo (a) wygenerowali pusty adres URL Bloba, który będzie używany jako symbol zastępczy podczas podawania danych z innego źródła, lub (b) Blob w jakiś sposób działa jako serwer proxy dla zaszyfrowanych danych (przez rozszerzenia HTML5 Encrypted Media Extensions). Jednak nie jestem pewien, jak można to zrobić w praktyce. –
@ bhh1988 Wygląda jak [specyfikacja rozszerzenia źródła mediów] (https: //dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html) umożliwia tworzenie adresów URL typu blob dla strumieni multimediów zarządzanych przez JavaScript. Nie odpowiadają one statycznym danym, takim jak adresy URL obiektów blob omawianych w tym poście, stąd różnica w zachowaniu, ale nadal odnoszą się do lokalnych informacji, a nie bezpośrednio do danych na serwerze. –
Innym sposobem na utworzenie adresu URL danych z adresu URL blob może być użycie obszaru roboczego.
var canvas = document.createElement("canvas")
var context = canvas.getContext("2d")
context.drawImage(img, 0, 0) // i assume that img.src is your blob url
var dataurl = canvas.toDataURL("your prefer type", your prefer quality)
jak to, co widziałem w mdn, canvas.toDataURL jest obsługiwany również przez przeglądarki. (z wyjątkiem np. < 9, zawsze tj. < 9)
nawet po odkodowaniu adresu URL, nadal jest linkiem 'localhost'. Zamiast tego dowiedz się, jaki jest jej publiczny link. (którego CDN używasz?) – Raptor
Chciałbym używać javascript. – Jacob
Skorzystaj z [powiązania przepływu stosu] (http://stackoverflow.com/questions/332872/how-to-encode-a-url-in-javascript) .. i [W3C] (http://www.w3schools.com /jsref/tryit.asp?filename=tryjsref_decodeuricomponent) Twoim prawdziwym problemem będzie to, jak uniezależnić go od środowiska, w którym twój kod zostanie wdrożony: – user1428716