什么是BLOB URL,为什么要使用它?

什么是BLOB URL,为什么要使用它?

_小老虎_关注

0.3062018.09.22 13:33:03字数 745阅读 6,535

在百家号上,发现视频src如下所示:

src="blob:https://...

是可以播放和打开,很神奇,我就去查了一下这块。

那么问题来了

  • 什么是blob网址?
  • 为什么使用它?
  • 我可以在服务器上创建自己的Blob URL吗?
  • 如果你有任何额外的细节

Blob URL(参考W3C,官方名称)或Object-URL(参考MDN和方法名称)与BlobFile对象一起使用。

src =“blob:https://crap.crap ”我打开了视频src中的blob url,它给出了一个错误,我无法打开,但与src标签一起工作,它有多可能?

Blob URL只能由浏览器在内部生成。

URL.createObjectURL()将创建一个特殊的Blob或File对象的引用,以后可以使用它来发布URL.revokeObjectURL()

这些URL只能在浏览器的单个实例中和同一个会话中(即页面/文档的生命周期)在本地使用。

什么是Blob网址? 为什么使用它?

Blob URL / Object URL是一种伪协议,允许Blob和File对象用作图像,下载二进制数据链接等的URL源。

例如,不能处理Image对象的原始字节数据,因为它不知道如何处理它。它需要例如图像(二进制数据)通过URL加载。
这适用于任何需要URL作为源的东西。不用上传二进制数据,而是通过URL提供回来,最好使用额外的本地步骤来直接访问数据而无需通过服务器。

对于编码为Base-64的字符串的Data-URI也是更好的选择。Data-URI的问题是每个char在JavaScript中占用两个字节。最重要的是,由于Base-64编码增加了33%。Blob是纯粹的二进制字节数组,它不像Data-URI那样具有任何重要的开销,这使得它们处理速度越来越快。

我可以在服务器上创建自己的Blob网址吗?

否,Blob网址/对象网址只能在浏览器内部制作。可以通过文件读取器API创建Blob并获取File对象,尽管BLOB只是意味着Binary Large对象并以字节数组的形式存储。客户端可以请求数据以ArrayBuffer或Blob的形式发送。服务器应该将数据作为纯二进制数据发送。数据库通常也使用Blob来描述二进制对象,实际上我们基本上是在谈论字节数组。

如果你有其他细节

需要将二进制数据封装为BLOB对象,然后使用它URL.createObjectURL()为其生成本地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

请注意,URL可能会在webkit浏览器中添加前缀,因此请使用:

var url = (URL || webkitURL).createObjectURL(...);
发布了16 篇原创文章 · 获赞 213 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/cxu123321/article/details/104075392