URLs de blob (ref W3C , nome oficial) ou URLs de objeto (ref. MDN e nome do método) são usados com um objeto Blob ou File .
src = "blob: https: //crap.crap " Abri o URL do blob que estava no src do vídeo, deu um erro e não consigo abrir, mas estava trabalhando com a tag src como é possível?
URLs de blob só podem ser gerados internamente pelo navegador. URL.createObjectURL()
criará uma referência especial ao objeto Blob ou File, que poderá ser liberado posteriormente usando URL.revokeObjectURL()
. Esses URLs podem ser usados apenas localmente na instância única do navegador e na mesma sessão (ou seja, a vida da página / documento).
O que é um URL de blob?
Por que é usado?
URL de blob / URL de objeto é um pseudo-protocolo para permitir que os objetos Blob e File sejam usados como fonte de URL para coisas como imagens, links de download para dados binários e assim por diante.
Por exemplo, você não pode entregar dados de bytes brutos de um objeto Image, pois ele não saberia o que fazer com ele. Requer, por exemplo, imagens (que são dados binários) para serem carregadas via URLs. Isso se aplica a qualquer coisa que exija um URL como fonte. Em vez de fazer o upload dos dados binários, em seguida, servi-os novamente por meio de uma URL, é melhor usar uma etapa local extra para poder acessar os dados diretamente sem precisar acessar um servidor.
Também é uma alternativa melhor ao Data-URI, que são cadeias codificadas como Base-64 . O problema com o Data-URI é que cada caracter ocupa dois bytes em JavaScript. Além disso, 33% são adicionados devido à codificação Base-64. Os blobs são arrays de bytes binários puros que não possuem sobrecarga significativa como o Data-URI, o que os torna mais rápidos e menores de manipular.
Posso criar meu próprio URL de blob em um servidor?
Não, URLs de blob / URLs de objetos podem ser criados apenas internamente no navegador. Você pode criar Blobs e obter o objeto File através da API do File Reader, embora BLOB signifique OBject grande binário e seja armazenado como matriz de bytes. Um cliente pode solicitar que os dados sejam enviados como ArrayBuffer ou Blob. O servidor deve enviar os dados como dados binários puros. Os bancos de dados geralmente usam o Blob para descrever objetos binários e, em essência, estamos falando basicamente de matrizes de bytes.
se você tiver detalhes adicionais
Você precisa encapsular os dados binários como um objeto BLOB e, em seguida, usar URL.createObjectURL()
para gerar uma URL local para ele:
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
Observe que URL
pode ser prefixado em navegadores da webkit, então use:
var url = (URL || webkitURL).createObjectURL(...);