前端文件流处理:Blob、File、ArrayBuffer 与 FormData 的 4 种转换场景详解
前端文件流处理:Blob、File、ArrayBuffer 与 FormData 的 4 种转换场景详解
在现代前端开发中,文件处理是一个无法绕开的核心话题。无论是图片上传、大文件分片传输,还是二进制数据解析,都离不开对 Blob、File、ArrayBuffer 和 FormData 这四种关键对象的深入理解。本文将带你深入剖析这些对象之间的转换关系,并通过实际代码示例展示它们在前端开发中的典型应用场景。
1. 核心对象解析与技术选型
1.1 二进制对象家族
Blob (Binary Large Object) 是前端处理二进制数据的基石对象,它具有以下关键特性:
size属性表示数据大小(字节)type属性表示 MIME 类型- 可通过
slice()方法进行分片处理
JAVASCRIPT
const blob = new Blob(['Hello World'], { type: 'text/plain' });
console.log(blob.size); // 11
console.log(blob.type); // "text/plain"
File 对象继承自 Blob,是用户文件在浏览器中的抽象表示:
- 除了继承 Blob 的属性外,还包含文件名、最后修改时间等信息
- 通常通过
<input type="file">获取
JAVASCRIPT
// 通过input获取的File对象示例
const fileInput = document.querySelector('input[type="file"]');
const file = fileInput.files[0];
console.log(file.name); // 文件名
ArrayBuffer 是固定长度的原始二进制数据缓冲区:
- 不能直接操作,需要通过类型化数组(如 Uint8Array)或 DataView 操作
- 适合处理纯二进制数据
JAVASCRIPT
const buffer = new ArrayBuffer(16); // 创建16字节缓冲区
const view = new Uint8Array(buffer); // 创建视图
FormData 是专门为表单数据设计的数据结构:
- 支持文本和文件数据的混合传输
- 自动设置
multipart/form-data的 Content-Type
1.2 技术选型决策矩阵
| 使用场景 | 推荐对象 | 优势说明 |
|---|---|---|
| 文件分片上传 | Blob + FormData | 支持大文件切片,兼容性好 |
| 二进制数据处理 | ArrayBuffer | 底层操作,性能最优 |
| 表单文件上传 | File + FormData | 标准表单提交方式 |
| 内存敏感操作 | Blob | 可释放内存,避免OOM |
2. 实战转换场景详解
2.1 File 转 Base64 预览
图片预览是文件上传的常见需求,核心是通过 FileReader 将 File
最低 0.47元/天 开通会员,解锁全文
成为会员后, 你将解锁