一文了解 Blob 文件格式,前端必备技能之一

目录

  1. Blob 是什么?

  2. Blob 的构造与属性

  3. Blob 的常见用途

  4. 如何创建 Blob 对象

  5. Blob 与 File 的区别

  6. Blob 在前端的典型应用案例

  7. 兼容性与注意事项


1. Blob 是什么?

  • Blob(Binary Large Object)是 JavaScript 中用于表示不可变的类文件对象,主要用于处理二进制数据。

  • 它可以存储任意格式的数据,如图片、视频、音频、文本等。

  • Blob 不关心数据格式,只是一个二进制原始数据的容器。


2. Blob 的构造与属性

const blob = new Blob(arrayOfData, options);
  • arrayOfData:包含各种数据类型的数组(如字符串、ArrayBuffer、TypedArray 等)。

  • options:可选参数对象,常用属性是 type,指定 MIME 类型。

主要属性

属性说明
sizeBlob 对象的字节大小
typeBlob 的 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 的区别

特性BlobFile
继承关系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 的示例,随时告诉我!

一文了解Blob文件格式,前端必备技能之一 – 菜鸟-创作你的创作

### 前端 Blob 文件格式使用方法及属性 #### 创建 Blob 对象 Blob 对象表示不可变的类文件对象。这些对象表示不同类型的二进制数据,通常用于处理图像、音频或视频等多媒体内容以及其他二进制文件。 ```javascript const blob = new Blob(["hello", "world"], {type : 'text/plain'}); ``` 此代码创建了一个新的 `Blob` 实例,其中包含字符串 `"helloworld"` 并指定了 MIME 类型为纯文本[^1]。 #### File 继承自 Blob File 接口基于 Blob,继承了其全部功能并进行了扩展以便更好地支持本地文件操作。这意味着任何适用于 Blob 的 API 和特性同样适用于 File 对象。 #### 将 Base64 转换为 Blob 数据 当从前端接收到 base64 编码的数据时,可以利用 JavaScript 提供的方法将其转换成 Blob 格式的实际文件: ```javascript function base64ToBlob(base64) { const binaryString = window.atob(base64); const uint8Array = new Uint8Array(binaryString.length); Array.prototype.forEach.call(binaryString, (c, i) => { uint8Array[i] = c.charCodeAt(0); }); return new Blob([uint8Array], { type: "application/octet-stream" }); } ``` 这段代码定义了一个名为 `base64ToBlob` 函数,它接受一个 base64 字符串作为参数,并返回一个新的 Blob 对象实例[^3]。 #### 下载 Blob 文件 为了使用户能够下载由 Blob 构建的内容,在浏览器环境中可以通过创建 `<a>` 元素来触发下载行为: ```javascript const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = 'filename.txt'; document.body.appendChild(link); link.click(); setTimeout(() => { document.body.removeChild(link); }, 0); ``` 上述脚本片段展示了如何动态生成链接并通过调用 click 方法模拟点击事件实现自动下载过程[^2]。 #### 发起请求获取 Blob 数据 对于需要从服务器拉取资源的情况,则可通过 AJAX 请求指定响应类型为 `'blob'` 来接收远程文件流: ```javascript axios.post('/api/export', {}, { responseType: 'blob' }).then(response => { // 处理 response.data 中的 Blob 数据... }); ``` 这里展示了一种通过 Axios 库发起 POST 请求的例子,设置 `responseType` 参数确保服务器回应被解析为原始字节序列而不是默认情况下尝试解释为 JSON 或者 XML 文档结构[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值