JavaScript中什么是Blob对象_如何创建下载

Blob 是 JavaScript 中表示不可变原始二进制数据的容器,用于安全高效地处理文件、图片等资源;支持通过 new Blob() 创建、URL.createObjectURL() 生成临时 URL 下载,并需手动 revoke 释放内存。

javascript中什么是blob对象_如何创建下载

Blob 对象是 JavaScript 中用于表示**不可变的、原始二进制数据**的容器,常用于处理文件、图片、音频、PDF 等二进制内容。它不直接暴露数据本身,而是提供一种安全、高效的方式去读取、传输或下载二进制资源。

什么是 Blob 对象

Blob(Binary Large Object)本质是一个“数据块”,可以由字符串、ArrayBuffer、TypedArray、FormData 等创建。它的特点是:

只读,无法修改内部数据 支持按类型(type)声明 MIME 类型(如 "text/plain""image/png") 可通过 URL.createObjectURL() 转为临时 URL,用于下载、预览或作为 JavaScript中什么是Blob对象_如何创建下载 / 的 src 需手动调用 URL.revokeObjectURL() 释放内存(尤其在大量生成时)

如何创建 Blob 对象

使用 new Blob(parts, options) 构造函数:

parts:数组,可包含字符串、ArrayBufferUint8Array、其他 Bloboptions:对象,常用 { type: "mime/type" }

示例:

立即学习“Java免费学习笔记(深入)”;

const text = "Hello, 下载测试!";const blob = new Blob([text], { type: "text/plain;charset=utf-8" });const json = JSON.stringify({ name: "张三", score: 95 });const jsonBlob = new Blob([json], { type: "application/json;charset=utf-8" });// 从 ArrayBuffer 创建(如 fetch 后的 arrayBuffer())fetch("/api/data.bin")  .then(res => res.arrayBuffer())  .then(buf => {    const binBlob = new Blob([buf], { type: "application/octet-stream" });  });

如何实现点击下载 Blob 内容

核心步骤:创建 Blob → 生成临时 URL → 创建并触发隐藏链接下载 → 清理 URL

URL.createObjectURL(blob) 获取可访问的临时地址 动态创建 标签,设置 hrefdownload 属性(后者指定下载文件名) 调用 .click() 触发下载 下载完成后尽快调用 URL.revokeObjectURL(url) 避免内存泄漏

封装一个通用下载函数:

function downloadBlob(blob, filename) {  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); // 立即释放}// 使用示例const content = "这是一份导出的文本";const blob = new Blob([content], { type: "text/plain;charset=utf-8" });downloadBlob(blob, "report.txt");

常见注意事项

中文文件名在部分浏览器(如 Safari)可能乱码:建议用英文或拼音命名,或服务端配合处理 大文件不要一次性转成字符串再建 Blob:优先用 ArrayBuffer 或流式处理(如 ReadableStream + TransformStream不能跨域直接下载 Blob URL:Blob URL 是同源的,仅限当前页面使用,无需担心跨域问题 移动端 Safari 对 download 属性支持有限:此时可引导用户长按链接保存,或改用 iframe 方案(兼容性更广但略复杂)

基本上就这些。Blob 是前端做文件生成、导出、离线缓存的基础能力,掌握它就能灵活应对各种下载和二进制操作场景。

以上就是JavaScript中什么是Blob对象_如何创建下载的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1541129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 13:03:29
下一篇 2025年12月21日 13:03:44

相关推荐

  • JavaScript并发控制_javascript多任务处理

    JavaScript通过事件循环实现异步任务的并发控制,使用concurrentControl函数限制最大并发数,避免资源耗尽;该函数利用Promise和索引追踪任务执行,确保最多同时运行指定数量的任务,完成后汇总结果,适用于批量请求、文件上传等场景,提升应用稳定性。 JavaScript 是单线程…

    2025年12月21日
    000
  • JavaScript响应式_javascript数据绑定

    JavaScript通过监听数据变化实现响应式,核心是自动更新视图。2. Vue 2用Object.defineProperty拦截属性的get/set,实现依赖追踪和视图更新。3. Vue 3采用Proxy代理整个对象,支持数组和动态属性,更强大灵活。4. 双向绑定结合输入事件与响应式监听,实现数…

    2025年12月21日
    000
  • JavaScript模块化开发_JavaScript工程化实践

    JavaScript模块化通过ES6的import和export实现代码拆分与复用,解决早期命名冲突问题;结合Webpack、Vite等工具提升构建效率,支持Tree-shaking和按需加载,增强可维护性与性能优化。 JavaScript模块化开发是现代前端工程中的核心实践之一。随着项目规模扩大,…

    2025年12月21日
    000
  • JavaScript视频控制_javascript播放器

    首先通过HTML5 video标签和JavaScript实现视频播放控制,具体包括:1. 使用play()和pause()方法实现播放暂停;2. 通过currentTime属性同步进度条并支持拖动跳转;3. 利用volume属性调节音量;4. 调用Fullscreen API实现全屏功能,需由用户点…

    2025年12月21日
    000
  • JavaScript变量提升解析_javascript作用域

    变量提升本质是声明在编译阶段被收集到作用域顶部,赋值保留在原地。var和function声明会被提升,其中函数优先级高于变量;let和const存在暂时性死区,声明前访问会报错;函数表达式仅变量名提升,初始化为undefined;块级作用域中let/const不暴露提升行为。应避免依赖提升,推荐先声…

    2025年12月21日
    000
  • javascript_浏览器渲染原理

    JavaScript通过阻塞DOM解析、影响渲染树构建及触发重排重绘来干扰浏览器关键渲染路径。1. 脚本默认阻塞HTML解析;2. 访问布局属性引发强制同步布局;3. 长任务导致主线程卡顿。优化方式包括:使用async/defer异步加载脚本;拆分长任务;批量DOM操作;利用requestAnima…

    2025年12月21日
    000
  • 代码覆盖率统计_使用Istanbul测量测试完整性

    Istanbul(nyc)是JavaScript代码覆盖率工具,通过静态分析和插桩测量语句、函数、分支和行的执行情况;支持多种报告格式,可配置阈值用于CI,结合Mocha等框架生成HTML报告,绿色为已覆盖、红色为未执行、黄色为部分覆盖,帮助定位测试盲区,提升代码质量。 在编写单元测试或集成测试时,…

    2025年12月21日
    000
  • JavaScript中如何创建对象_构造函数和字面量的区别

    JavaScript创建对象最常用构造函数和字面量:字面量适合一次性简单对象,语法简洁但方法不共享;构造函数支持批量实例化、原型继承与方法复用,适用于多对象场景。 JavaScript中创建对象最常用的是构造函数和字面量两种方式,核心区别在于:字面量更简洁、适合一次性简单对象;构造函数更适合批量创建…

    2025年12月21日
    000
  • JavaScript中什么是作用域链_变量如何查找

    作用域链是JavaScript中变量查找的机制,基于函数定义时的词法位置形成,由当前词法环境及其外层引用逐级构成,用于从内到外查找变量直至全局,未找到则报ReferenceError。 作用域链是 JavaScript 中变量查找的机制,它决定了当前执行上下文能访问哪些变量。简单说,当代码中引用一个…

    2025年12月21日
    000
  • JavaScript算法实现_javascript编程挑战

    数组去重:利用Set特性去除重复元素,return […new Set(arr)];2. 回文判断:转小写后与反转字符串比较,cleaned === cleaned.split(”).reverse().join(”);3. 快速排序:选基准值分治递归,left、…

    2025年12月21日
    000
  • javascript_如何实现缓存机制

    使用缓存可提升JavaScript性能,避免重复计算或请求。1. 用Map或对象实现基础缓存,如斐波那契数列记忆化;2. 封装memoize函数,自动缓存可序列化参数的调用结果;3. 浏览器中可用localStorage持久化缓存,WeakMap避免内存泄漏,Service Worker结合Cach…

    2025年12月21日
    000
  • JavaScript内存泄漏_javascript问题排查

    JavaScript内存泄漏指分配的内存未被释放,导致页面卡顿或崩溃,常见类型包括意外的全局变量、未清理的定时器、未解绑事件监听、闭包引用过大对象及DOM节点残留引用;可通过Chrome DevTools的Memory面板拍堆快照、Performance面板监控内存曲线等方式排查;预防措施包括避免全…

    2025年12月21日
    000
  • JavaScript中什么是副作用_如何避免副作用

    副作用是函数执行时除返回值外对外部状态的可观察改变,如修改全局变量、DOM、发起网络请求等;纯函数需满足相同输入恒得相同输出且无任何副作用,应通过参数传入依赖、使用不可变操作等方式实现。 副作用是指函数在执行过程中,除了返回值之外,还对外部状态产生了可观察的改变。比如修改了全局变量、改变了传入对象的…

    2025年12月21日
    000
  • JavaScript:将对象内嵌套数组合并并格式化为新数组的实用指南

    本文将详细介绍如何在javascript中处理包含嵌套数组的对象数据结构。我们将探讨一种高效的方法,通过迭代并结合对象内部的并行数组元素,将其转换为一个全新的、格式化后的字符串数组,例如将 `names` 和 `length` 数组合并为 `[‘name (length)’]…

    2025年12月21日
    000
  • JavaScript中FileReader API:正确读取本地文件内容的教程

    本教程详细介绍了如何使用javascript的`filereader` api从html文件输入元素中读取本地文件内容。文章重点阐述了`filereader`的异步特性,并指导开发者如何通过监听`load`事件来正确获取文件数据,避免常见的`undefined`错误。通过提供清晰的示例代码和注意事项…

    2025年12月21日
    000
  • JSON Schema条件验证:理解if/then/else的正确作用域

    本教程深入探讨JSON Schema中`if/then/else`条件验证的正确使用方法,特别是当需要根据一个属性的值来动态验证另一个对象属性的键模式时。文章将阐明常见的验证作用域混淆问题,并提供一个结构清晰、逻辑严谨的解决方案,确保条件逻辑按预期工作,实现灵活且强大的数据验证。 在JSON Sch…

    2025年12月21日
    000
  • React组件Props类型推断:TypeScript泛型与映射类型实践

    本文深入探讨如何在react组件中利用typescript的泛型、映射类型和工具类型,实现对组件props的严格类型推断与控制。通过一个表格组件的实例,详细讲解如何确保`columns`、`columnorder`和`cellrenderer`等属性的键名严格来源于`rows`数据类型,从而大幅提升…

    2025年12月21日
    000
  • Google Cloud Functions 时区配置:限制与处理策略

    google cloud functions 运行时环境默认采用协调世界时(utc),且不支持全局配置服务器实例的时区。这意味着开发者无法直接更改函数运行时的默认时区。为了处理不同时区的日期和时间,应用程序必须在代码逻辑层面进行显式管理和转换,通常建议内部使用 utc,并在需要时转换为目标时区。 C…

    2025年12月21日
    000
  • marked.js自定义图片渲染与路径前缀处理教程

    本教程详细介绍了如何使用`marked.js`处理非标准markdown图片语法(如`![[filename]]`)。通过预处理将自定义语法转换为`marked.js`可识别的标准格式,并利用其`renderer`选项自定义图片渲染逻辑,实现自动为图片url添加`images/`前缀,最终生成符合要…

    好文分享 2025年12月21日
    000
  • 深入理解 Fetch API 响应处理:从 Blob 到文本的正确姿势

    本教程旨在解决使用 javascript `fetch api` 从服务器获取数据时常见的响应解析问题,特别是当预期为纯文本但实际获取到 `blob` 对象的情况。文章将详细阐述 `fetch api` 响应对象的处理机制,包括 `response.text()`、`response.json()`…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信