blob是javascript处理二进制数据的核心不可变容器,需通过arraybuffer()、filereader或url接口转换使用;可由字符串、数组或arraybuffer创建,支持下载、预览和上传,与arraybuffer需显式异步转换。

Blob 对象是 JavaScript 处理二进制数据的核心载体,它不直接暴露字节,而是以“不可变容器”的方式安全封装原始数据。真正操作二进制内容时,需要配合 FileReader、arrayBuffer() 或 URL 接口来桥接和转换。
创建 Blob:从字符串、数组或 ArrayBuffer 构建
构造 Blob 最常见的方式是传入数据片段(字符串、Uint8Array、ArrayBuffer、其他 Blob)和可选的 MIME 类型:
- 文本内容:
new Blob(["Hello"], { type: "text/plain" }) - 二进制字节:
new Blob([new Uint8Array([0x48, 0x65, 0x6C, 0x6C, 0x6F])], { type: "text/plain" }) - 合并多个源:
new Blob([blob1, arrayBuffer, "footer"], { type: "application/pdf" })
注意:type 参数只影响 blob.type 属性和后续 MIME 相关行为(如下载文件名后缀、<img> 渲染判断),不改变实际二进制内容。
读取 Blob 内容:转成 ArrayBuffer 或文本
Blob 本身不能遍历字节,必须通过异步方式提取原始数据:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
blob.arrayBuffer()(推荐):const buf = await blob.arrayBuffer();
返回 Promise,解析后得到标准 ArrayBuffer,再用Uint8Array操作字节 - 用 FileReader(兼容性更广):
const reader = new FileReader();reader.readAsArrayBuffer(blob);
在onload中获取reader.result(即 ArrayBuffer) - 读为文本(仅限可编码内容):
reader.readAsText(blob, "utf-8")
⚠️ 不要试图同步读取:Blob 没有 .bytes 或 .data 属性;blob.arrayBuffer(无括号)不是方法,会报错。
使用 Blob:下载、预览与上传
Blob 的典型用途是生成临时资源链接或作为网络请求载荷:
-
下载文件:
const url = URL.createObjectURL(blob);
创建<a href="url" download="name"></a>并触发点击;用完后务必调用URL.revokeObjectURL(url)释放内存 -
网页内预览(图片/视频/PDF):
直接赋值给<img src="url">或<video src="url"></video> -
上传到服务器:
可直接传给fetch()或XMLHttpRequest.send();也可用blob.slice()分片上传大文件
与 ArrayBuffer 的关系:分工明确,需显式转换
ArrayBuffer 是可读写的底层内存块,适合像素处理、协议解析等精细操作;Blob 是浏览器抽象的不可变文件级对象,侧重传输与交互。
- ArrayBuffer → Blob:直接
new Blob([buffer], { type: "..." }) - Blob → ArrayBuffer:必须异步,
await blob.arrayBuffer()(不能省略await或.then) - 大文件(如 >100MB)慎用
arrayBuffer(),避免内存溢出;优先考虑stream()+ReadableStream分块读取
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










