一文了解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

DeepSeek-R1-Distill-Llama-70B:开源推理效率新高度

深度求索(DeepSeek)正式发布基于Llama-3.3-70B-Instruct蒸馏的开源大模型DeepSeek-R1-Distill-Llama-70B,该模型通过创新的强化学习与蒸馏技术结合,在保持700亿参数规模模型强大推理能力的同时,显著提升了实际应用中的运行效率,为开源社区提供了兼具高性能与部署灵活性的新一代推理模型。 【免费下载链接】DeepSeek-R1-Distill-Llama-70BDeepSeek-R1-Distill-Llama-70B:采用大规模强化学习与先验指令微调结合,实现强大的推理能力,适用于数学、代码与逻辑推理任务。源自DeepSeek-R1,经Llama-70B模型蒸馏,性能卓越,推理效率高。开源社区共享,支持研究创新。【此简介由AI生成】 项目地址: https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-R1-Distill-Llama-70B 当前大语言模型领域正面临“性能-效率”平衡的关键挑战。随着模型参数规模持续增长,虽然推理能力不断突破,但高算力需求和部署成本成为企业落地的主要

Stable Diffusion数据集标签编辑器:AI绘画新手的智能标注神器

Stable Diffusion数据集标签编辑器:AI绘画新手的智能标注神器 【免费下载链接】stable-diffusion-webui-dataset-tag-editorExtension to edit dataset captions for SD web UI by AUTOMATIC1111 项目地址: https://gitcode.com/gh_mirrors/st/stable-diffusion-webui-dataset-tag-editor Stable-Diffusion-WebUI-Dataset-Tag-Editor是一款专为AI绘画用户设计的智能数据集标签管理工具,能够帮助用户高效整理和优化训练数据集的标签信息。这个强大的扩展插件让原本复杂的标签编辑工作变得简单直观,即使是初学者也能快速上手。 🎯 项目速览:AI绘画的数据管家 数据集标签编辑器是Stable Diffusion WebUI生态中的重要组成部分,它解决了AI绘画训练中最关键的数据准备问题。通过可视化界面,用户可以: * 批量管理数千张图片的标签 * 智能筛选和分类数据集

2026-01-14 学习记录--LLM-申请Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例)

2026-01-14 学习记录--LLM-申请Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例)

LLM-申请 Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例) 一、请求访问Llama模型 ⭐️ 随便进入想要访问的Llama模型,这里展示的是Meta-Llama-3-8B-Instruct。 1、 点击链接,申请访问Llama模型 2、 填写相关申请信息,注意如下:👇🏻(1)、国家最好选「美国」,然后填 「美国的大学」;(2)、操作这一步时,节点需要是对应国家的节点(若是美国,那么节点也要是美国)。 3、 提交成功后,就可开始申请Llama模型的Hugging Face 访问令牌啦~ 二、申请Llama模型的Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例)⭐️ 1、判断是否需要申请 访问Meta-Llama-3.1-8B-Instruct模型在Hugging Face上的官方仓库。 假若你看见“You need to agree to share your

【混元AIGC+腾讯云智能体+首创Coze核心流思维导图MCP】:打造一个文思通-智能写作助手Agent

【混元AIGC+腾讯云智能体+首创Coze核心流思维导图MCP】:打造一个文思通-智能写作助手Agent

【混元AIGC+腾讯云智能体+首创Coze核心流思维导图MCP】:打造一个文思通-智能写作助手Agent 1.背景 作为一名长期关注人工智能发展的内容创作者,我经常需要撰写关于AI技术、应用趋势和产品体验的文章。然而,在实际写作过程中,常常会遇到灵感枯竭、结构混乱、表达不够精准等问题。有时候写到一半才发现逻辑断层,或者内容重复,甚至忘记了一些关键知识点。 为了解决这些痛点,我决定打造一个专属于自己的智能写作助手,取名为“文思通”——寓意“文思如泉涌,条理通达”。这个助手不仅要能帮我生成内容,更要具备结构化思维引导、逻辑梳理和语言润色的能力。 最近,我接触到一种创新的工具组合:以 Coze 平台为核心逻辑流,结合自研的思维导图 MCP 服务,可以实现从文本到可视化思维导图的自动转换。这正好解决了我在构思阶段缺乏条理的问题。而选择开发平台时,我注意到腾讯云智能体开发平台与腾讯混元大模型(Hunyuan AIGC) 的深度整合能力非常出色,支持工作流编排、插件扩展(MCP),并且提供稳定高效的推理服务。 最终,我决定采用“混元AIGC + 腾讯云智能体平台