关于Blob,Arraybuffer,File

321 阅读1分钟

前言

在前端的日常开发中很少用到,碰上是基本上google一下 然后ctrl+c,ctrl+v. 一直缺少一个比较体系的了解,这篇文章打算从头开始理一下这几个是什么,彼此的关系

Blob

总结一句就是一个用来储存类大文件的的对象

const blob = new Blob(['xxxxxx'], { type: 'text/plian' })

Arraybuffer

用来获取一段固定大小的内存,但是对这段内存的操作就需要类型数组对象或者DataView

const buffer = new ArrayBuffer(2);
const view = new Uint8Array(buffer);
view[0] = 104;
view[1] = 105;
// hi
String.fromCharCode(...view);

File

file 接口基于Blob的, 主要是<input type="file"/> 获取这个对象 一般我们对它的子类FileReder使用的比较多,还有就是 通过URL.createObjectURL(file)来获取一段blob url (blob:[http://domain]:uuid)

URL.createObjectURL(new Blob(['xx']))
"blob:https://juejin.im/2a178305-8b40-497d-b7a2-2499a6c40560"

之间的转换

Blob ---> ArrayBuffer

const blob= new Blob(['hi']);
blob.arrayBffer().then((buffer)=> {
	console.log(buffer);
})

ArrayBuffer ---> Blob

const str = 'hello';
const buffer = new ArrayBuffer(str.length);
const view = new Unit8Array(buffer);
[...str].forEach((s, idnex)=> {
    view[index] = s.charCodeAt(0);
})

const blob = new Blob([view], { type: 'text/palin' })

File ---> ArrayBuffer

const reader = new FileReader();
reader.onload = (e) => {
	// e.target.result
}
reader.readAsArrayBuffer();

待补充....