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

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

文章目录


在这里插入图片描述

前言

最近在项目中需要导出文档时,我首次接触到了 Blob 文件格式。作为一个前端开发者,虽然经常听到 "Blob" 这个术语,但对其具体原理和应用场景并不十分了解。经过一番研究和实践,我决定将所学整理成文,与大家分享 Blob 技术的奥秘。

一、什么是Blob?

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

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

二、Blob的基本特性

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

三、Blob的构造函数

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

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

四、常见使用场景

1. 文件下载

functiondownloadFile(content, filename, type){const blob =newBlob([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. 图片预览

functionpreviewImage(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. 大文件分片上传

functionuploadLargeFile(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

用于读取 BlobFile 对象的内容:

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

3. URL.createObjectURL()

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

4. Response

Fetch APIResponse 对象可以将 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 技术可以轻松实现:

functionexportAsWord(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 =newBlob([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及以下版本,需要使用替代方案如 msSaveBlobFileSaver.js 等polyfill。

八、总结

Blob 作为 Web 开发中处理二进制数据的重要工具,在文件操作、多媒体处理、数据存储等场景中发挥着关键作用。通过本文的介绍,相信大家对 Blob 技术有了更深入的理解。在实际开发中,合理使用 Blob 可以大大提升应用的性能和用户体验。

Read more

2025年睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)解题报告 | 珂学家

2025年睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)解题报告 | 珂学家

前言 题解 2025年睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)解题报告 睿抗一如既往的码量大,喜欢阅读理解挖坑,T_T。 T3 应该是最简单,如果去掉匹配串 2 字节的限制,感觉会是一道有趣的题。 RC-u1 谁拿冠军了? 分值: 15分 考察点:hash表的使用 注意点:明明某一天里,可能存在多个相同操作,需要求其总和,在除 2。 #include<bits/stdc++.h>usingnamespace std;intmain(){int n, m; cin >> n >> m;int A1, A2, B1,

告别复杂配置!NewBie-image-Exp0.1让AI绘画简单上手

告别复杂配置!NewBie-image-Exp0.1让AI绘画简单上手 你是不是也曾经被AI绘画的环境配置劝退?安装依赖报错、模型权重下载缓慢、代码Bug频出……明明只想画张图,却像在做一场系统工程。今天,这一切都结束了。 NewBie-image-Exp0.1 镜像的出现,彻底改变了这一局面。它不是简单的打包,而是真正实现了“开箱即用”的动漫图像生成体验。无需折腾环境、不用手动修复Bug、不必担心显存溢出——只要一键部署,你就能立刻开始创作高质量的动漫角色图像。 本文将带你全面了解这个神奇的镜像:从快速上手的第一步,到核心功能的深度解析,再到实用技巧和避坑指南。无论你是AI绘画的新手,还是想提升效率的老手,都能在这里找到属于你的创作捷径。 1. 为什么你需要NewBie-image-Exp0.1? 在介绍怎么用之前,先说清楚它到底解决了什么问题。 1.1 传统AI绘画部署的三大痛点 我们先来回顾一下,如果你自己从零开始部署一个类似3.5B参数量级的动漫生成模型,通常会遇到哪些麻烦: * 环境地狱:Python版本、PyTorch与CUDA的兼容性、各种库的依赖冲突

Stable Diffusion WebUI完全攻略:从零基础到AI绘画大师

Stable Diffusion WebUI完全攻略:从零基础到AI绘画大师 【免费下载链接】stable-diffusion-webuiAUTOMATIC1111/stable-diffusion-webui - 一个为Stable Diffusion模型提供的Web界面,使用Gradio库实现,允许用户通过Web界面使用Stable Diffusion进行图像生成。 项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui 想要用文字创造精美图像吗?Stable Diffusion WebUI 作为基于Gradio库构建的Web界面,让任何人都能轻松使用Stable Diffusion进行AI绘画创作。本文将带你从基础操作到高级技巧,全面掌握这个强大的AI绘画工具。 基础入门:发现AI绘画的无限可能 创意生成模块:文字到图像的魔法转换 Stable Diffusion WebUI 的核心功能分为两大创意模块: 界面探索之旅:认识你的创作工作室 从界面布局可以看出,整个创作环境分为三大功

即插即用系列 | 2024 SOTA LAM-YOLO : 无人机小目标检测模型

即插即用系列 | 2024 SOTA LAM-YOLO : 无人机小目标检测模型

论文名称:LAM-YOLO: Drones-based Small Object Detection on Lighting-Occlusion Attention Mechanism YOLO 论文原文 (Paper):https://arxiv.org/abs/2411.00485 GitHub 仓库链接:https://github.com/AITricks/AITricks 哔哩哔哩视频讲解:https://space.bilibili.com/57394501?spm_id_from=333.337.0.0 目录 * 1. 核心思想 * 2. 背景与动机 * 3. 主要贡献点 * 4. 方法细节 * 5. 即插即用模块的作用