跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
JavaScript大前端

Blob 文件格式详解及前端应用场景

Blob 是 JavaScript 中表示二进制数据的不可变对象,常用于文件处理、多媒体存储及网络传输。其核心特性包括类型标识、分片能力及大小存储。常见场景涵盖文件下载、图片预览及大文件分片上传。Blob 与 File API、FileReader、URL.createObjectURL() 及 Fetch Response 紧密相关。开发中需注意内存释放,通过 revokeObjectURL 及时清理资源,大文件处理可结合 Web Worker 避免阻塞主线程。现代浏览器广泛支持该 API,IE 需 polyfill 方案。

佛系玩家发布于 2026/3/26更新于 2026/4/243 浏览
Blob 文件格式详解及前端应用场景

什么是 Blob?

Blob(Binary Large Object,二进制大对象)是 JavaScript 中用于表示二进制数据的一个对象。它本质上是一个不可变的、原始数据的类文件对象,可以存储大量的二进制数据。

// 创建一个简单的 Blob 对象
const blob = new Blob(["Hello, world!"], { type: 'text/plain' });

Blob 的基本特性

  • 不可变性:一旦创建,Blob 对象的内容无法直接修改
  • 类型标识:通过 MIME 类型标识数据格式
  • 大小存储:可以存储大量二进制数据
  • 分片能力:可以被分割成更小的 Blob 对象

Blob 的构造函数

Blob 构造函数接受两个参数:

new Blob(blobParts, options);
  • blobParts:由 ArrayBuffer、ArrayBufferView、Blob、DOMString 等对象构成的数组
  • options:可选参数,包含两个属性:
    • type:Blob 内容的 MIME 类型
    • endings:指定包含行结束符\n的字符串如何写入

常见使用场景

1. 文件下载

function downloadFile(content, filename, type) {
    const blob = new Blob([content], { type });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = filename;
    a.click();
    URL.revokeObjectURL(url);
}
// 使用示例
downloadFile('Hello, world!', 'example.txt', 'text/plain');

2. 图片预览

function previewImage(file) {
    const blob = URL.createObjectURL(file);
    const img = document.createElement('img');
    img.onload = function() {
        URL.revokeObjectURL(this.src); // 释放内存
    };
    img.src = blob;
    document.body.appendChild(img);
}
// 使用示例
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (e) => {
    previewImage(e.target.files[0]);
});

3. 大文件分片上传

function uploadLargeFile(file, chunkSize = 1024 * 1024) {
    let offset = 0;
    const fileSize = file.size;
    while (offset < fileSize) {
        const chunk = file.slice(offset, offset + chunkSize);
        // 上传 chunk...
        offset += chunkSize;
    }
}

Blob 与其他 API 的关系

1. File API

File 对象继承自 Blob,在 Blob 基础上增加了文件名、最后修改时间等元数据。

2. FileReader

用于读取 Blob 或 File 对象的内容:

const reader = new FileReader();
reader.onload = function(e) {
    console.log(e.target.result);
};
reader.readAsText(blob);

3. URL.createObjectURL()

创建指向 Blob 对象的 URL,可用于预览或下载。

4. Response

Fetch API 的 Response 对象可以将 Blob 作为响应体:

fetch(url).then(response => response.blob()).then(blob => {
    // 处理 blob
});

性能与内存管理

使用 Blob 时需要注意:

  1. 内存释放:通过 URL.revokeObjectURL() 及时释放不再需要的 Blob URL
  2. 大文件处理:对于大文件,考虑使用 slice() 方法分块处理
  3. Worker 线程:处理大型 Blob 时可在 Web Worker 中进行以避免阻塞主线程

实际案例:导出 Word 文档

最近我在项目中需要将 HTML 内容导出为 Word 文档,使用 Blob 技术可以轻松实现:

function exportAsWord(html, filename = 'document.doc') {
    // Word 文档的 HTML 模板
    const template = `
        <html xmlns:o="urn:schemas-microsoft-com:office:office" 
              xmlns:w="urn:schemas-microsoft-com:office:word" 
              xmlns="http://www.w3.org/TR/REC-html40">
            <head>
                <meta charset="UTF-8">
                <title>Document</title>
            </head>
            <body>${html}</body>
        </html>
    `;
    // 创建 Blob 对象
    const blob = new Blob([template], { type: 'application/msword' });
    // 创建下载链接
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = filename;
    document.body.appendChild(a);
    a.click();
    // 清理
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
}

浏览器兼容性

大多数现代浏览器都支持 Blob API,包括:

  • Chrome 20+
  • Firefox 13+
  • Safari 6+
  • Edge 12+
  • Opera 15+

对于 IE10 及以下版本,需要使用替代方案如 msSaveBlob 或 FileSaver.js 等 polyfill。

目录

  1. 什么是 Blob?
  2. Blob 的基本特性
  3. Blob 的构造函数
  4. 常见使用场景
  5. 1. 文件下载
  6. 2. 图片预览
  7. 3. 大文件分片上传
  8. Blob 与其他 API 的关系
  9. 1. File API
  10. 2. FileReader
  11. 3. URL.createObjectURL()
  12. 4. Response
  13. 性能与内存管理
  14. 实际案例:导出 Word 文档
  15. 浏览器兼容性
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog

更多推荐文章

查看全部
  • Google AI Studio 使用指南:Gemini 3.0 Pro 参数配置与系统指令优化
  • Midjourney 进阶:色调详解(上)
  • 前端模块化开发:从面条代码到结构化代码的蜕变
  • Microsoft Edge WebView2 Runtime 运行库快速部署与调试指南
  • 本地化部署大语言模型:趋势与开源工具推荐
  • 学生成绩综合统计分析系统设计与实现
  • Diffusion Transformer(DiT):将 U-Net 换成 ViT,应用于视频生成与机器人动作预测
  • 基于 Java 的家庭医生签约服务与健康管理平台
  • C++ 函数进阶:递归与尾递归优化
  • PyTorch CUDA v2.7 环境支持 Stable Diffusion 等多种模型架构
  • QuantConnect LEAN 引擎:开源量化交易核心架构与实战
  • React Native Android UI 性能调试实践
  • 2025 年睿抗机器人开发者大赛 CAIP-编程技能赛本科组国赛解题报告
  • Java 泛型基础、自定义及通配符详解
  • GLM-CookBook:智谱 GLM 大模型 API 入门指南
  • AI 驱动的零信任架构:从“永不信任”到“智能信任”的算法演进
  • 基于 Vue 和 SpringBoot 的疫苗接种管理系统设计与实现
  • 复旦微 FMQL45T900 与 ZYNQ7045 对比测评:性能差异与迁移指南
  • 国产时序数据库云原生实践:Apache IoTDB 与 TimechoDB 深度应用
  • Java String 类详解与常用方法

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online