Blob、File和ArrayBuffer的区别和联系
| 对象 | 区别 | 联系 |
|---|---|---|
| File | 特殊类型的Blob对象,代表一个文件 | 是Blob对象的子类,拥有文件相关属性和方法 |
| Blob | 二进制大对象,表示不可变的原始数据 | 可以通过File、XHR等方式创建;可以使用slice方法截取部分数据 |
| ArrayBuffer | 低级别的数据结构,存储二进制数据 | 可以通过Blob对象获取其二进制数据 |
属性和方法
| 对象 | 属性 | 方法 |
|---|---|---|
| File | name, size, type, lastModified | slice(), arrayBuffer() |
| Blob | size, type | slice(), arrayBuffer(), stream(), text(), blob() |
| ArrayBuffer | byteLength | - |
相关联的API
这些属性和方法可用于处理文件上传、下载、读取、写入等操作,以及与服务器进行交互时的文件处理任务。
| API | 属性 | 方法 |
|---|---|---|
| FileReader | - | readAsText()(读取为文本)、readAsArrayBuffer()(读取为ArrayBuffer)、readAsDataURL()(读取为Data URL)、abort()(中止) |
| XMLHttpRequest | responseType(响应类型) | send()(发送请求)、onreadystatechange(状态变化事件) |
| URL | - | createObjectURL()(创建URL)、revokeObjectURL()(释放URL) |
| FormData | - | append()(添加字段) |
| FileWriter | - | write()(写入数据)、seek()(移动指针位置)、truncate()(截断文件)、abort()(中止) |
日常使用场景
-
二进制流转为base64
-
btoa()函数 -
TextEncoder - 适用于处理大型二进制数据,特别是在浏览器环境中
-
Uint8Array - 适用于处理大型二进制数据,特别是在浏览器环境中
-
// 假设binaryData是二进制流的数组或Uint8Array对象 const binaryData = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f]); // 示例二进制数据:Hello // 使用TextEncoder将二进制流转换为Base64编码 const textEncoder = new TextEncoder(); const base64Data = btoa(String.fromCharCode.apply(null, textEncoder.encode(binaryData))); console.log(base64Data); // 输出:SGVsbG8=
-
-
Buffer对象(Node.js)- 使用Buffer.from(binaryData).toString('base64')将二进制数据转换为Base64编码
-