临时文件分享
30 分钟–24 小时 · 最多 10 个文件 · 每个 50 MB · 适合 AI Agent
工作原理
每个文件连同你选的有效期通过 Pages Functions 端点 /api/upload 上传到 Cloudflare R2。对象会带一个自定义 expiresAt 时间戳;/f/<id> 在每次下载时检查该字段,过期返回 410 Gone。R2 的 1 天 lifecycle 规则会物理删除对象作为兜底。
为 AI Agent 设计
许多语言模型 Agent 具备 fetch 或浏览工具,但你直接粘贴 URL 时它们不会主动去下载 — 会把它当作不透明字符串。每个结果行上的 Agent 提示词变体会在 URL 前面加一句"请下载并阅读这个文件"(按当前语言),让模型清楚看到指令并伸手去用 fetch 工具。
防猜测
URL ID 使用 16 位 base62 字符(约 95 位熵),猜中一个有效链接的概率几乎为零。除此之外,/f/* 的每个 404/410 都会让 KV 里的来源 IP 失败计数 +1。失败 10 次后,该 IP 被推入封禁列表,TTL 设为 30 天,期间该 IP 既不能访问 /f/* 也不能调用 /api/upload。
可以上传什么
任意类型、最大 50 MB。无需限制类型,因为下载始终带 Content-Disposition: attachment 和 X-Content-Type-Options: nosniff — 浏览器会保存文件而不是渲染,所以上传的 HTML/SVG/JS 不能在本站作为脚本执行。
限制与速率
- 每批最多 10 个文件。
- 每个文件最大 50 MB(由上传 Function 强制 — 前端的限制只是 UX 体验)。
- 有效期:30 分钟到 24 小时之间任选。
- 每 IP 上传限频:5/分钟、30/小时、80/天。
- 当 bucket 用量接近免费额度上限时,上传返回
503,直到过期文件释放空间为止 — 自动恢复。
隐私
每个 URL 请视为与持有链接的人共享,而不是私密存储。链接在现实中不可猜,封禁列表也挡掉了爆破,但任何拿到 URL 的人在它过期前都能下载文件。我们对 IP 做 SHA-256 哈希再用作 KV 键,从不写到 R2 对象上,每个下载响应都带 noindex, nofollow。