临时文件分享
5 分钟–1 小时 · 最大 25 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。
可以上传什么
任意类型、最大 25 MB。无需限制类型,因为下载始终带 Content-Disposition: attachment 和 X-Content-Type-Options: nosniff — 浏览器会保存文件而不是渲染,所以上传的 HTML/SVG/JS 不能在本站作为脚本执行。
限制与速率
- 免费:每次 1 个文件。Plus:每批最多 20 个文件。
- 每个文件最大 25 MB(由上传 Function 强制 — 前端的限制只是 UX 体验)。
- 有效期:5 分钟到 1 小时之间任选。
- 上传限频 —— 匿名:10/分钟、60/小时、160/天(按 IP 计);登录:10/分钟、50/小时、200/天;Plus:30/分钟、200/小时、600/天(按账号计,不受 CGNAT 共享 IP 影响)。
- 每个限频窗口(1 分钟 / 1 小时 / 24 小时)从你开启该窗口的那次上传起算 — 既不是 UTC 凌晨 0 点,也不是你的本地时区零点。所以不论何时开始用,都能拿满整个窗口的额度。
- 当 bucket 用量接近免费额度上限时,上传返回
503,直到过期文件释放空间为止 — 自动恢复。
隐私
每个 URL 请视为与持有链接的人共享,而不是私密存储。链接在现实中不可猜,封禁列表也挡掉了爆破,但任何拿到 URL 的人在它过期前都能下载文件。我们对 IP 做 SHA-256 哈希再用作 KV 键,从不写到 R2 对象上,每个下载响应都带 noindex, nofollow。