임시 파일 공유
30분–24시간 · 최대 10개 파일 · 각 50MB · AI 에이전트 친화적
작동 방식
Each file is sent to a Cloudflare R2 bucket through the Pages Functions endpoint at /api/upload, along with the lifetime you picked. The object is written with a custom expiresAt timestamp; /f/<id> reads it on every download and returns 410 Gone once it elapses. A 1-day R2 lifecycle rule physically removes the object as a backstop.
AI 에이전트를 위한 설계
Many language-model agents can call fetch or a browsing tool, but they won't proactively download a URL you paste — they treat it as an opaque string. The Agent prompt variant on every result row prepends a short instruction ("Please download and read this file") in the active language, so the model sees a clear directive next to the URL and reaches for its fetch tool.
Anti-enumeration
URL IDs are 16 base62 characters (~95 bits of entropy), so the chance of guessing a live link is essentially zero. On top of that, every 404/410 from /f/* increments a per-IP miss counter in KV. After 10 misses the IP gets pushed onto a ban list with a 30-day TTL and is blocked from both /f/* and /api/upload until the marker expires.
어떤 파일을 올릴 수 있나요?
Any file, any size up to 50 MB. Type isn't restricted because downloads are always served with Content-Disposition: attachment and X-Content-Type-Options: nosniff — the browser saves the file instead of rendering it, so an uploaded HTML/SVG/JS file can't run as a script on this origin.
제한 및 속도
- Up to 10 files per batch.
- 50 MB per file (enforced by the upload Function — the frontend cap is just a courtesy).
- Lifetime: any value between 30 minutes and 24 hours.
- Per-IP rate limit: 5/min, 30/h, 80/day on uploads.
- When the bucket nears the free-tier ceiling, uploads return
503until expired files free up space — recovery is automatic.
개인정보
Treat each URL as shared with whoever holds the link, not as private storage. The id is unguessable in practice and the ban list stops casual brute force, but anyone you share the URL with can fetch the file until it expires. We hash IPs (SHA-256) before using them as a KV key, never persist them on the R2 object, and serve every download with noindex, nofollow.