前言:前端
直接经过new Blob()
就能够建立一个Blob对象ajax
var aBlob = new Blob( array, options );
array(可选):是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其余相似对象的混合体。(暂时能够不用理解,就能够看做是一堆数据)
options(可选):一个对象,用来
设置Blob的一些属性。主要的是一个type属性,表示Blob的类型(其余暂时也不用管)。
简单来讲,就是能够经过向new Blob()传一堆数据,生成一个Blob对象数据库
Blob.size(只读):Blob对象中包含的数据大小(字节)
Blob.type(只读):代表该Blob对象所包含数据的MIME类型。例如若为图片,此字段就相似为’image/jpeg‘。若是类型未知,则该值为空字符串。数组
Blob只有一个slice方法,实现对文件的分割(注意这里并不违背Blob的只读性,slice只是只是复制指定范围内的Blob数据)。dom
Blob.slice(start, end ,contentType)
start:开始索引,能够为负数,语法相似于数组的slice方法。默认值为0。
end:结束索引,能够为负数,语法相似于数组的slice方法。默认值为最后一个索引。
contentType:新的Blob对象的MIME类型,这个值将会成为新的Blob对象的type属性的值,默认为一个空字符串。异步
简单来讲,Blob就是一个只读的二进制文件,咱们能够知道它的文件大小(size),文件类型(type),并能够对其做出分割(slice)。wordpress
ArrayBuffer的概念和用法相对比较复杂(它自己不复杂,只是使用方式比较丰富),以后会在另一篇博客做出解释,这里仅作简要说明,主要是理解它的宏观概念。函数
blob与ArrayBuffer的关系工具
- 相同点: Blob和ArrayBuffer都是二进制的容器;
- ArrayBuffer:ArrayBuffer更底层,就是一段纯粹的内存上的二进制数据,咱们能够对其任何一个字节进行单独的修改,也能够根据咱们的须要以咱们指定的形式读取指定范围的数据
- Blob:Blob就是将一段二进制数据作了一个封装,咱们拿到的就是一个总体,能够看到它的总体属性大小、类型;能够对其分割,但不能了解到它的细节
- 联系:Blob能够接受一个ArrayBuffer做为参数生成一个Blob对象,此行为就至关于对ArrayBuffer数据作一个封装,以后就是以总体的形式展示了
- 应用上的区别:因为ArrayBuffer和Blob的特性,Blo做为一个总体文件,适合用于传输;而只有须要关注细节(好比要修改某一段数据时),才须要用到ArrayBuffer
<input type="file">
选择的FileList对象,或者是使用拖拽操做搞出的DataTransfer对象。这里就不作过多介绍了,能够直接参考MDN上的介绍编码
file就是blob里面的一个小类,继承Blob的方法和属性,拥有本身特有的属性。一般表示<input type="file">
里的fileList对象
经过fileReader能够将Blob读取为不一样的格式,具体将在另外一篇博文中讲到。
Q:前面提到,ArrayBuffer也须要借助工具(以dataView为例)读取数据,那和fileReader有什么区别呢?
A:我理解的,ArrayBuffer的工具dataView只是简单的读取数据,最多就是讲数据转为数字或字符串;但fileReader能够看作是多了一道编码的过程,经过FileReader.readAsDataURL(blob)就是将二进制数据读取并编码为Base64格式,FileReader.readAsText(blob)就是将二进制数据读取并编码为字符串形式。
准确来讲,FormData其实与上述内容关系就不大了。它是XMLHttpRequest Level 2添加的一个新的接口,咱们能够经过JavaScript用一些键值对来模拟一系列表单控件。FormData的最大优势就是,比起普通的ajax, 使用FormData咱们能够异步上传一个二进制文件,而这个二进制文件,就是咱们上面讲的Blob对象。