当前位置:   article > 正文

JS中的File(一):Blob对象详解_js file blob

js file blob

一、定义

Blob是一个装着二进制数据的容器对象。Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作

二、属性

  • size:只读属性,Blob中的字节数
  • type:只读属性,表示Blob存放的媒体类型,图片、视频、文本文件等等

三、构造函数

例子:

  1. const array = ['<q id="a"><span id="b">hey!</span></q>']; // 一个包含单个字符串的数组
  2. const blob = new Blob(array, { type: "text/html" }); // 得到 blob

构造函数主要有两个参数:

  • 参数一:存放文件原始数据的可迭代对象,一般放数组。数组中可以存放各种类型的文件数据格式,例如Buffer、Blob、String等等,如下:【一般都需要在资源内容外面套个中括号[]
  1. // Create a new Blob object
  2. var a = new Blob();
  3. // Create a 1024-byte ArrayBuffer
  4. // buffer could also come from reading a File
  5. var buffer = new ArrayBuffer(1024);
  6. // Create ArrayBufferView objects based on buffer
  7. var shorts = new Uint16Array(buffer, 512, 128);
  8. var bytes = new Uint8Array(buffer, shorts.byteOffset + shorts.byteLength);
  9. var b = new Blob(["foobarbazetcetc" + "birdiebirdieboo"], {type: "text/plain;charset=utf-8"});
  10. var c = new Blob([b, shorts]);
  11. var a = new Blob([b, c, bytes]);
  • 参数二:Optionals,可选的配置项,其中主要可配置的属性有两个:
    • type:同第二大点中属性中的type,规定Blob对象文件读取格式
    • endings:可选值为transparent  和 native ,默认为前者,其含义是如果数据是文本,如何解析文本中的换行符。默认值 transparent 会将换行符复制到 blob 中而不会改变它们。要将换行符转换为主机系统的本地约定,请指定值 native

四、常用方法和参数

1、 arrayBuffer()

返回一个 promise,会兑现为一个包含 blob 数据(以二进制形式)的 ArrayBuffer

2、slice()

使用示例:

slice(start, end, contentType)

其中参数start、end代表字节的索引,可以为正数也可以为负数,如果是负数代表这个偏移量将从末尾往前进行计算,例如-10代表Blob的倒数第10个字节。

另外,start、end代表是左闭右开区间,即end索引指向的字节并不会读取进去

contentType的输入会修改slice生成后新Blob对象中的内容属性type

3、stream()

Blob接口的 stream() 方法返回一个 ReadableStream 对象,读取它将返回包含在 Blob 中的数据

4、text()

Blob接口的 text() 方法返回一个 Promise,其会兑现一个包含 blob 内容的 UTF-8 格式的字符串。

五、Blob的读取

1、使用FileReader对象读取Blob对象中的文件或数据

  • 构造
let file_reader=new FileReader()
  • 指定对Blob的读取方式
  1. file_reader.readAsArrayBuffer(blob)//fileReader中的result保存为读取文件的ArrayBuffer数据对象
  2. file_reader.readAsBinaryString(blob) //result保存为原始二进制数据
  3. file_reader.readAsDataURL(blob) //result保存为格式 data : ${URL格式的Base64字符串}
  4. file_reader.readAsText(blob) //result保存为包含一个字符串以表示所读取的文件内容
  • 定义callBack处理读取到的文件内容
  1. file_reader.onload = function (){
  2. let resultData = file_reader.result
  3. //....
  4. }

其中onload代表在读取操作成功完成时触发;onloadstart代表在读取操作开始的时候触发;onloadend代表读取操作结束时触发(失败或成功

另外callback有onerror、onabort、onprogress 

  • 终止读取操作
FileReader.abort()  //返回的readyState属性为DONE

2、使用URL对象读取Blob为指定url格式

相当于加一个url入口,来获取本域下Blob对象的资源内容

以利用Blob对象进行图片下载的场景为例

  1. const downloadUrl = URL.createObjectURL(blob)
  2. const link = document.createElement('a')
  3. link.href = downloadUrl
  4. link.download = 'image.png'
  5. link.style.display = 'none';
  6. document.body.appendChild(link)
  7. link.click()
  8. document.body.removeChild(link);
  9. // 释放 URL 对象
  10. URL.revokeObjectURL(link.href)

上述代码,借助隐藏节点 a元素标签的download属性,人为触发点击事件,完成下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/145039
推荐阅读
相关标签
  

闽ICP备14008679号