toolgarden.xyz
EN
Blob URLURL.createObjectURLFile APIData URL

Blob URL 是什么?URL.createObjectURL() 工作原理

解释 blob: 临时地址如何把内存数据交给浏览器元素、与 Base64 Data URL 的区别,以及生命周期管理。

ToolGarden 推荐的工具优先在浏览器本地运行,文件和文本不必上传到服务器,适合更注重安全隐私的日常处理。

发布于 2026年9月20日约 8 分钟阅读作者 ToolGarden

Blob URL 是临时地址,让浏览器原生功能访问 Blob 或 File。它看起来像 blob:https://example.com/...,但并不对应公共服务器文件。

对象 URL 连接 JavaScript 管理的二进制数据与 img、video、iframe、Worker 和下载链接,无需把每个字节转换成长 Base64 文本。

createObjectURL 创建了什么

URL.createObjectURL(blob) 在当前浏览器上下文登记 Blob 并返回不透明标记。元素请求时,浏览器把它解析到字节和 MIME。

这个字符串是能力引用,不是编码或文件路径,不能解析或持久化为永久地址。

预览与下载链路

图片工具把 WebP Blob URL 赋给 img.src;ZIP 工具把压缩包 URL 赋给带 download 文件名的链接。创建 URL 是同步的,消费和解码仍可能异步。

const url = URL.createObjectURL(blob);
preview.src = url;
download.href = url;
download.download = 'result.zip';
URL.revokeObjectURL(url);

生命周期与清理

URL 保持登记时,浏览器需要让 Blob 可访问。反复替换预览却不释放旧 URL,会保留大型输出并增加内存。

不要在图片加载或下载消费前释放。应在替换旧结果、组件清理或目标操作开始后释放;已下载文件不受影响。

Blob URL 与 Data URL

Data URL 把内容直接放进字符串,通常使用 Base64;Blob URL 把字节留在浏览器管理区,只传短标记,避免 Base64 膨胀和巨型字符串。

Data URL 可移植,适合小型内嵌资源;Blob URL 限于会话,更适合大型临时预览和下载。

属性Blob URLData URL
数据浏览器管理 BlobURL 字符串内部
开销无 Base64 膨胀通常 4/3
生命周期释放/上下文结束前字符串存在期间
可移植
场景大型预览/下载小型内嵌资源

安全与隐私

Blob URL 难猜但不是身份验证。得到适当上下文权限的代码可能访问它,敏感 URL 不应暴露给不受信任脚本。

创建 Blob URL 不会上传;把 Blob 交给 fetch 或 FormData 才会。隐私取决于完整代码路径。

常见错误

典型问题包括从不释放、过早释放、Blob 替换后保留旧 URL、把 URL 存数据库,或期待刷新后继续有效。

  • 需要重新生成时保留 Blob。
  • 替换结果时释放旧 URL。
  • 只有分享需要时才使用持久服务器 URL。
  • 大型预览避免 Base64。

总结

createObjectURL 不编码也不上传文件,只为已有 Blob 建立临时浏览器引用。用它完成预览和下载,并及时释放旧 URL。

常见问题

Q.别人能打开我的 Blob URL 吗?

它不是可移植公开链接,受浏览器上下文与来源行为限制。

Q.释放会删除 Blob 吗?

只移除 URL 映射,其他 Blob 引用和已下载文件仍存在。

Q.它比 Base64 更好吗?

对大型本地二进制通常更节省内存。