Vercel Blob 现已支持生成带有效期的签名 URL
TL;DR · AI 摘要
Vercel Blob 现已支持生成带有效期的签名 URL,可用于浏览器直接上传、下载、检查或删除特定对象,安全性高且无需暴露长期存储令牌。
核心要点
- 支持 PUT、GET、HEAD 和 DELETE 四种操作的签名 URL,有效期最长 7 天。
- 浏览器可直接通过签名 URL 实现大文件流式上传,无需经过服务器中转。
- 删除操作支持条件判断(ETag 匹配),避免误删最新版本。
结构提纲
按章节快速跳转。
介绍 Vercel Blob 签名 URL 的核心功能及其应用场景,包括安全性、时效性和操作限制。
详细说明 GET、PUT、HEAD 和 DELETE 操作的签名 URL 如何在浏览器端实现直接访问和操作 Blob 对象。
描述 PUT 操作如何支持多部分上传,使浏览器能直接将大文件写入 Blob 存储。
解释 DELETE 操作如何通过 ETag 实现条件删除,防止覆盖最新版本。
说明服务器如何通过 OIDC 认证生成签名令牌,并确保长期存储令牌的安全性。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Vercel Blob 签名 URL
- 核心功能
- 支持四种操作:GET, PUT, HEAD, DELETE
- 有效期最长 7 天
- 单路径、单操作范围
- 应用场景
- 浏览器直接上传大文件
- 直接访问和操作 Blob 对象
- 条件删除(ETag 匹配)
- 安全机制
- 与 OIDC 集成
- 长期存储令牌不外泄
金句 / Highlights
值得收藏与分享的关键句。
签名 URL 支持 GET、PUT、HEAD 和 DELETE 操作,有效期最长可达 7 天。
浏览器可以直接通过签名 URL 进行大文件上传,无需经过服务器中转。
DELETE 操作支持条件删除,仅当 ETag 匹配时才执行删除。
与 OIDC 集成后,长期存储令牌不会离开服务器,提升了安全性。
Vercel Blob 现已支持签名 URL - Vercel
1 分钟阅读
2026 年 6 月 2 日
现在您可以为 Vercel Blob 生成带有时间限制的签名 URL。签名 URL 是一个带有效期的范围 URL,允许您上传、下载、检查或删除特定对象,而无需授予对整个 Blob 存储的访问权限。
每个 URL 都限定于单个操作(put、get、head 或 delete)、单个路径名,并且您可以选择有效期,最长可达 7 天。签名涵盖了操作和约束条件,因此一个用于 GET 的签名 URL 不能被用作 PUT。
presigned-get.ts
import { issueSignedToken, presignUrl } from '@vercel/blob';
const token = await issueSignedToken({
operations: ['get'],
});
const { presignedUrl } = await presignUrl(token, {
pathname: 'invoices/2026-q1.pdf',
operation: 'get',
validUntil: Date.now() + 5 * 60 * 1000, // 5 分钟
});
// 在客户端
<img src={presignedUrl} />发出令牌,生成一个 5 分钟的读取 URL,并让浏览器直接渲染该对象。
[直接从浏览器上传](https://vercel.com/changelog/signed-urls-are-now-available-for-vercel-blob#direct-uploads-from-the-browser)
上传 URL (put) 支持多部分上传,因此浏览器可以直接将大文件流式传输到 Blob 存储,而无需通过您的服务器来回传输。
presigned-put.ts
import { presignUrl } from '@vercel/blob';
const { presignedUrl } = await presignUrl(token, {
pathname: 'user-uploads/avatar.png',
operation: 'put',
validUntil: Date.now() + 15 * 60 * 1000,
});
// 在客户端
await fetch(presignedUrl, { method: 'PUT', body: file });生成一个 15 分钟的上传 URL,以便浏览器直接将文件写入 Blob。
[条件删除](https://vercel.com/changelog/signed-urls-are-now-available-for-vercel-blob#conditional-deletes)
删除 URL 接受 ifMatch 选项,因此只有在自签名 URL 以来对象未被覆盖时,删除操作才会生效:
presigned-delete.ts
import { presignUrl } from '@vercel/blob';
const { presignedUrl } = await presignUrl(token, {
pathname: 'tmp/session.json',
operation: 'delete',
validUntil: Date.now() + 60 * 1000,
ifMatch: '"a1b2c3"', // 您打算删除的版本的 ETag
});
// 在客户端
await fetch(presignedUrl, { method: 'DELETE' });如果自签名 URL 以来 ETag 发生了变化,则删除操作将不执行任何操作。
签名 URL 与 OIDC 一起使用。您的服务器通过 OIDC 认证到 Blob,生成一个签名令牌,并为浏览器生成狭窄范围、带有时间限制的 URL,因此您的长期 BLOB_READ_WRITE_TOKEN 永远不会离开服务器。
更新 @vercel/blob 到 2.4.0 并 阅读文档 开始使用。