当然可以,以下是一篇全面讲解 Blob 文件格式 的前端必备技能文章,适合作为技术博文、学习笔记或培训资料:
🧩 一文了解 Blob 文件格式:前端必备技能之一
在前端开发中,Blob(Binary Large Object)是处理二进制数据的核心接口之一,是与文件处理、图片上传、音视频流、Web API 对接等密切相关的重要工具。本文将全面解析 Blob 的原理、用法与实战案例,助你掌握前端数据处理的核心技能。
📌 目录
什么是 Blob?
Blob 和 File 有何区别?
如何创建 Blob?
Blob 常见用途与实战技巧
Blob 与 URL.createObjectURL()
Blob 转换为 File、Base64 等
注意事项与浏览器兼容性
小结与推荐实践
1️⃣ 什么是 Blob?
Blob 是 Binary Large Object 的缩写,用于表示不可变的原始二进制数据文件。你可以把它看作浏览器中表示“原始文件数据”的一个轻量对象。
在 JavaScript 中,Blob 可用于:
创建临时文件对象
图片、音频、视频的上传与处理
从 canvas 导出图像
数据流的拼接和传输
2️⃣ Blob vs File:有什么区别?
特性BlobFile来源自定义数据用户上传或浏览器系统生成有文件名❌ 无✅ 有最常用场景二进制拼接、传输表单上传继承关系–File 继承自 Blob
console.log(new File(["hello"], "test.txt") instanceof Blob); // true
3️⃣ 如何创建 Blob?
const blob = new Blob(["Hello Blob!"], { type: "text/plain" });
console.log(blob.size); // 11
console.log(blob.type); // text/plain
支持的数据类型:
string
ArrayBuffer / TypedArray / DataView
Blob
以上混合组成的数组
const buffer = new ArrayBuffer(8);
const blob = new Blob(["prefix-", buffer], { type: "application/octet-stream" });
4️⃣ Blob 常见用途与实战技巧
✅ 下载文件(模拟下载链接)
const blob = new Blob(["Download me!"], { type: "text/plain" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "example.txt";
a.click();
URL.revokeObjectURL(url);
✅ 上传文件(用于接口 FormData)
const blob = new Blob(["Upload this!"], { type: "text/plain" });
const formData = new FormData();
formData.append("file", blob, "upload.txt");
fetch("/api/upload", {
method: "POST",
body: formData,
});
✅ canvas 导出图片
const canvas = document.querySelector("canvas");
canvas.toBlob((blob) => {
const url = URL.createObjectURL(blob);
// 显示或下载图片
});
5️⃣ Blob 与 URL.createObjectURL()
URL.createObjectURL(blob) 会为该 Blob 创建一个短期有效的内存 URL,可用于:
显示图片
⚠️ 记得手动 URL.revokeObjectURL(url) 释放内存资源!
6️⃣ Blob 的互转技巧
✅ Blob → File
const file = new File([blob], "file.txt", { type: blob.type });
✅ Blob → Base64
function blobToBase64(blob) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result);
reader.readAsDataURL(blob);
});
}
✅ Base64 → Blob
function base64ToBlob(base64) {
const [prefix, data] = base64.split(',');
const mime = prefix.match(/:(.*?);/)[1];
const binary = atob(data);
const array = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) array[i] = binary.charCodeAt(i);
return new Blob([array], { type: mime });
}
7️⃣ 注意事项与兼容性
Blob 在所有现代浏览器中都已支持
FileReader.readAsArrayBuffer 可与 Blob 协同处理大文件流
URL Blob 对象的内存不能自动释放,需手动释放
大文件分片上传可用 Blob.slice() 进行断点续传等处理
✅ 小结与推荐实践
应用场景推荐用法文件下载Blob + URL.createObjectURL + 表单文件上传FormData.append(blob, name)canvas / 视频 / 图片处理canvas.toBlob、MediaRecorder生成Blob文件预览FileReader 或 URL.createObjectURL转 Base64 传输FileReader.readAsDataURL(blob)
📚 延伸阅读
MDN: Blob 文档
MDN: FileReader
HTML5 Rocks: Working with Files