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

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

当然可以,以下是一篇全面讲解 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

相关风暴

如何搭建一个小说CMS系统(以笔趣阁CMS为例)
亚洲365bet备用

如何搭建一个小说CMS系统(以笔趣阁CMS为例)

🌀 09-21 🌊 阅读 6194
qq电话客服?电话客服怎么转人工?
365bet注册送36

qq电话客服?电话客服怎么转人工?

🌀 09-04 🌊 阅读 7133
蚂蚁花呗每天有限额吗?花呗每天限额多少?
亚洲365bet备用

蚂蚁花呗每天有限额吗?花呗每天限额多少?

🌀 08-06 🌊 阅读 4107
苹果美版5sa1453市场价多少?
365bet注册送36

苹果美版5sa1453市场价多少?

🌀 07-05 🌊 阅读 2829