无需登录 数据私有 本地保存

Blob URL 创建与预览 - 内存中生成可下载链接

7
0
0
0

Blob URL 创建与预览

在浏览器内存中生成 Blob 对象,创建可预览、可下载的临时 URL 链接

输入内容

0 字符
拖放文件到此处 或点击选择文件
支持任意类型文件,最大约 500MB

粘贴图片到此处

使用 Ctrl+V / ⌘+V 粘贴剪贴板中的图片

将在内存中创建 Blob 对象并生成临时 URL

预览与操作

等待生成
生成 Blob URL 后在此预览
尚未生成
- - -
历史记录
# 类型 大小 状态 操作
暂无记录

常见问题与知识点

Blob URL(也称为 Object URL)是浏览器为内存中的 Blob 或 File 对象生成的临时引用链接。其格式为 blob:https://example.com/550e8400-e29b-41d4-a716-446655440000,由协议头 blob: + 源地址 + UUID 组成。

它由 URL.createObjectURL() 方法生成,仅在创建它的文档(同源页面)中有效,关闭页面后自动失效。Blob URL 可直接用于 <img><video><a> 下载等场景。

特性Blob URLData URL
格式blob:https://...data:image/png;base64,...
存储位置浏览器内存(引用)直接嵌入字符串
大小限制较大(数百MB)较小(适合几MB以内)
内存效率高(按需读取)低(Base64 膨胀约33%)
生命周期需手动 revoke随字符串存在
适用场景大文件预览、下载、流媒体小图标、内联嵌入、持久存储

建议:处理大文件(如图片预览、视频、下载)优先使用 Blob URL;小图标或需要持久化的数据使用 Data URL。

URL.revokeObjectURL() 用于释放 Blob URL 占用的内存引用。虽然浏览器在页面关闭时会自动清理,但在单页应用(SPA)中长期不 revoke 会导致内存泄漏

每个 Blob URL 都会阻止对应的 Blob 对象被垃圾回收。如果频繁生成 Blob URL(例如视频帧截取、批量图片处理),不 revoke 会迅速耗尽内存。

最佳实践:在 Blob URL 使用完毕后(如下载触发后、图片加载完成后)立即调用 URL.revokeObjectURL(url)

Blob URL 绑定到创建它的源(origin),只能在同源的文档中使用。跨域的 iframe 或其他标签页无法访问。

但是,在同一源的新标签页中打开 Blob URL 是可行的(例如使用 window.open(blobUrl)),因为新标签页与当前页同源。

如果需要在不同源之间共享数据,可以考虑使用 postMessage 传递 Blob 数据本身,或使用 Data URL。

  • 文件下载:前端生成 CSV、JSON 配置文件等,通过 Blob URL 触发浏览器下载。
  • 图片/视频预览:用户选择本地文件后,使用 Blob URL 在页面上即时预览,无需上传服务器。
  • PDF 预览:将 PDF 文件的 Blob URL 赋值给 <iframe> 的 src,实现在线预览。
  • Web Worker:将脚本代码创建为 Blob URL,传递给 Worker 执行。
  • 流媒体播放:结合 MediaSource API,实现视频流的动态播放。
  • 剪贴板图片处理:从剪贴板粘贴的图片创建 Blob URL 进行编辑或上传。
  • 前端文件压缩:使用 Canvas 压缩图片后生成 Blob URL 供用户下载。

步骤如下:

  1. 使用 URL.createObjectURL(blob) 生成 Blob URL。
  2. 创建一个隐藏的 <a> 标签,设置 href 为 Blob URL。
  3. 设置 download 属性为期望的文件名。
  4. 程序化触发点击:a.click()
  5. (可选)在下载触发后 revoke URL。

本工具已集成此功能,点击「下载文件」按钮即可触发下载。

Blob URL 在创建它的文档生命周期内有效。页面刷新、关闭或导航到其他页面后,Blob URL 将自动失效。此外,一旦调用 URL.revokeObjectURL(),该 URL 也会立即失效。

这意味着 Blob URL 不适合用作持久化存储。如需持久保存数据,请使用 IndexedDB、localStorage(小数据)或将数据上传到服务器。