zoukankan      html  css  js  c++  java
  • Blob文件处理

    Blob对象简要介绍

    Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据。File 接口基于Blob,继承了 Blob 的功能并将其扩展使其支持用户系统上的文件。

    语法

    const aBlob = new Blob( array, options ); 
    

    参数说明

    • array 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。DOMStrings会被编码为UTF-8。
    • options 是一个可选的BlobPropertyBag字典,它可能会指定如下两个属性:
      • type,默认值为 "",它代表了将会被放入到blob中的数组内容的MIME类型。
      • endings,默认值为"transparent",用于指定包含行结束符 的字符串如何被写入。 它是以下两个值中的一个: "native",代表行结束符会被更改为适合宿主操作系统文件系统的换行符,或者 "transparent",代表会保持blob中保存的结束符不变

    示例

    const debug = {hello: "world"};
    const blob = new Blob([JSON.stringify(debug, null, 2)],{type : 'application/json'});
    

    URL.createObjectURL() 与 URL.revokeObjectURL()介绍

    URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。相当于这个方法创建了一个传入对象的内存引用地址

    createObjectURL语法

    objectURL = URL.createObjectURL(object);

    参数说明

    • object 是用于创建 URL 的 File 对象、Blob 对象或者 MediaSource 对象。​

    返回值

    • 一个可以引用到指定对象的DOMString

    URL.revokeObjectURL() 静态方法用来释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象。当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。

    你可以在 sourceopen 被处理之后的任何时候调用 revokeObjectURL()。这是因为 createObjectURL() 仅仅意味着将一个媒体元素的 src 属性关联到一个 MediaSource 对象上去。调用revokeObjectURL() 使这个潜在的对象回到原来的地方,允许平台在合适的时机进行垃圾收集

    revokeObjectURL语法

    window.URL.revokeObjectURL(objectURL);

    参数说明

    • objectURL 是一个 DOMString,表示通过调用 URL.createObjectURL() 方法产生的 URL 对象。

    内存管理

    在每次调用createObjectURL() 方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL() 方法来释放。浏览器会在文档退出的时候自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。

    示例:Excal下载

    axios({
                    url: '',
                    method: "post",
                    responseType: 'arraybuffer',
                }).then((res) => {
                    let blob = new Blob([res.data], {type: 'application/octet-stream'})
                    let url = URL.createObjectURL(blob)
                    let a = document.createElement('a')
                    document.body.appendChild(a)
                    a.href = url
                    a.download = 'result.xls'
                    a.target = '_blank'
                    a.click();
                    a.remove()
                })
    

      

     this.$http({
                    url: this.$http.adornUrl('insurance/downloadAttachModel'),
                    method: "post",
                    responseType: 'arraybuffer',
                }).then((res=> {
                    let blob = new Blob([res.data], {type: 'application/octet-stream'})
                    let url = URL.createObjectURL(blob)
                    let a = document.createElement('a')
                    document.body.appendChild(a)
                    a.href = url
                    a.download = 'result.xls'
                    a.target = '_blank'
                    a.click();
                    a.remove()
                })
  • 相关阅读:
    protobuf 协议 windows 下 C++ 环境搭建
    protobuf 协议 windows 下 java 环境搭建
    ProtocolBuffers (二) android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
    C++ ofstream和ifstream详细用法
    C# 关于out和ref的问题
    java 解析office文件 大全
    Ezhuang
    IOS
    Android Client and PHP Server
    一个IM开源项目LiteTalk
  • 原文地址:https://www.cnblogs.com/gitwusong/p/12106092.html
Copyright © 2011-2022 走看看