目 录CONTENT

文章目录

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

ByteNews
2022-01-30 / 0 评论 / 1 点赞 / 13,566 阅读 / 1,825 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-01-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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(...);

例子:

    blobToDataURL (blob) {
      var _self = this;
      var a1 = new FileReader();
      a1.readAsDataURL(blob);
      a1.onload = function (e) {
        console.log(e.target.result);
        _self.testImg = e.target.result;
      }
      console.log(a1);
    },
    getBolbUrl (){
      var _self = this;
      axios({
        method:'get',
        responseType: 'arraybuffer',
        url:'/8145003/1_de217eff-c7e7-49bb-ad8e-c7f9674b5978_.data'
      }).then(function(e){
        console.log(e.data)
        var t = new Uint8Array(e.data);
        const blob = new Blob([t.subarray(3, t.length)], {
            type: "image/jpg"
        });
        console.log(blob)
        var a = (window.URL || window.webkitURL).createObjectURL(blob);
        console.log("====="+a)
        _self.blobToDataURL(blob);

      });
    },
1

评论区