O que é um URL blob e porque é usado?
Estou tendo muitos problemas com o URL do blob.
Eu estava procurando por src
de uma tag de vídeo no YouTube e descobri que o vídeo src
era como:
src="blob:https://crap.crap"
Eu abri a URL do blob que estava no src
do vídeo que ele deu um erro. Eu não consigo't abrir o link, mas ele estava trabalhando com a tag src
. Como isso é possível?
Requisitos:
- O que é a URL do blob?
- Por que é usado?
- Posso fazer meu próprio URL blob em um servidor?
- Se você tiver qualquer detalhe adicional
272
3
URLs Blob (ref. W3C, nome oficial) ou Object-URLs (ref. MDN e nome do método) são usados com um objecto Blob ou um objecto File.
Os URLs Blob só podem ser gerados internamente pelo navegador.
URL.createObjectURL()
irá criar uma referência especial para o objeto Blob ou File que mais tarde pode ser lançado utilizandoURL.revokeObjectURL()
. Essas URLs só podem ser utilizadas localmente na única instância do navegador e na mesma sessão (ou seja, na vida da página/documento).Blob URL/Object URL é um pseudo protocolo para permitir que objetos Blob e File sejam usados como fonte URL para coisas como imagens, download de links para dados binários e assim por diante.
Por exemplo, você não pode entregar dados brutos de bytes de um objeto Image, pois ele não saberia o que fazer com ele. Ele requer por exemplo imagens (que são dados binários) para serem carregadas através de URLs. Isto se aplica a qualquer coisa que requeira um URL como fonte. Ao invés de carregar os dados binários, então servi-los de volta através de uma URL é melhor usar um passo local extra para poder acessar os dados diretamente sem ir através de um servidor.
É também uma melhor alternativa ao Data-URI que são cordas codificadas como Base-64. O problema com o Data-URI é que cada char leva dois bytes em JavaScript. Além disso, um 33% é adicionado devido à codificação Base-64. Blobs são puros byte-arrays binários que não têm nenhuma sobrecarga significativa como o Data-URI, o que os torna mais rápidos e menores de manusear.
Não, URLs Blob/ URLs de objeto só podem ser feitas internamente no navegador. Você pode fazer Blobs e obter o objeto File através da API do File Reader, embora BLOB signifique apenas Binary Large OBject e seja armazenado como byte-arrays. Um cliente pode solicitar que os dados sejam enviados como ArrayBuffer ou como Blob. O servidor deve enviar os dados como dados binários puros. As bases de dados frequentemente usam o Blob para descrever objetos binários também, e em essência estamos falando basicamente de byte-arrays.
Você precisa encapsular os dados binários como um objeto BLOB, então utilize
URL.createObjectURL()
para gerar uma URL local para ele:Note que
URL
pode ser prefixado em navegadores webkit-browsers, então use:O que é a blob url? Porque é usado?
BLOB é apenas uma sequência de bytes. O navegador reconhece-o como um fluxo de bytes. Ele é usado para obter o fluxo de bytes da fonte.
Posso fazer meu próprio blob url em um servidor?
Sim, você pode tentar fazer isso através do servidor, por exemplo: http://php.net/manual/en/function.ibase-blob-echo.php
Leia mais sobre
Esta função Javascript pretende mostrar a diferença entre a Blob API do ficheiro e a Data API para descarregar um ficheiro JSON no browser do cliente:
A função é chamada como
saveAsFile('out.json', jsonString);
. Ele irá criar um ByteStream imediatamente reconhecido pelo navegador que irá baixar o arquivo gerado diretamente utilizando a API File APIURL.createObjectURL
.No
else
, é possível ver o mesmo resultado obtido através do elementohref
mais o Data API, mas isto tem várias limitações que o Blob API não tem.