目录
-
Blob 是什么?
-
Blob 的构造与属性
-
Blob 的常见用途
-
如何创建 Blob 对象
-
Blob 与 File 的区别
-
Blob 在前端的典型应用案例
-
兼容性与注意事项
1. Blob 是什么?
-
Blob(Binary Large Object)是 JavaScript 中用于表示不可变的类文件对象,主要用于处理二进制数据。
-
它可以存储任意格式的数据,如图片、视频、音频、文本等。
-
Blob 不关心数据格式,只是一个二进制原始数据的容器。
2. Blob 的构造与属性
const blob = new Blob(arrayOfData, options);
-
arrayOfData:包含各种数据类型的数组(如字符串、ArrayBuffer、TypedArray 等)。
-
options:可选参数对象,常用属性是
type,指定 MIME 类型。
主要属性
| 属性 | 说明 |
|---|---|
size | Blob 对象的字节大小 |
type | Blob 的 MIME 类型字符串 |
slice() | 创建 Blob 的子集 |
3. Blob 的常见用途
-
上传文件数据时,将数据封装成 Blob。
-
利用 Blob 生成文件下载链接,实现“前端生成文件”。
-
用于 canvas、音频、视频等二进制数据的处理。
-
WebRTC、WebSocket 传输二进制数据。
4. 如何创建 Blob 对象
4.1 通过字符串创建
const textBlob = new Blob(["Hello Blob!"], { type: "text/plain" });
4.2 通过 ArrayBuffer 创建
const buffer = new ArrayBuffer(8);
const blobFromBuffer = new Blob([buffer], { type: "application/octet-stream" });
5. Blob 与 File 的区别
| 特性 | Blob | File |
|---|---|---|
| 继承关系 | Blob 是基础类 | File 继承自 Blob |
| 文件信息 | 无文件名、无最后修改时间 | 有文件名和修改时间属性 |
| 适用场景 | 二进制数据通用容器 | 用户本地文件对象 |
6. Blob 在前端的典型应用案例
6.1 创建可下载链接
const blob = new Blob(["Download content"], { type: "text/plain" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "example.txt";
document.body.appendChild(a);
a.click();
URL.revokeObjectURL(url);
6.2 上传图片裁剪后的数据
canvas.toBlob((blob) => {
// 通过 FormData 上传
const formData = new FormData();
formData.append('file', blob, 'cropped.png');
fetch('/upload', { method: 'POST', body: formData });
}, 'image/png');
7. 兼容性与注意事项
-
Blob 在主流浏览器(Chrome、Firefox、Safari、Edge)均有良好支持。
-
老版本 IE 通过
BlobBuilder或MSBlobBuilder实现,现已过时。 -
使用完 URL.createObjectURL 生成的链接要及时释放,避免内存泄漏。
总结
Blob 是前端处理中二进制数据的核心工具,灵活用于文件操作、数据传输和本地生成文件。掌握 Blob 能够极大提升前端对文件和二进制数据的处理能力,是现代 Web 开发不可或缺的技能。
如果你想,我还能帮你写 Blob 与 File API 深度结合的高级教程或结合 Canvas、WebRTC 的示例,随时告诉我!
3908

被折叠的 条评论
为什么被折叠?



