임시 파일 공유
5분–1시간 · 10MB 최대 · AI 에이전트 친화적
작동 방식
각 파일은 선택한 유효 기간과 함께 Pages Functions 엔드포인트 /api/upload를 거쳐 Cloudflare R2 버킷으로 갑니다. 객체는 자체 expiresAt 타임스탬프와 함께 기록되고, /f/<id>가 다운로드 때마다 이를 읽어 기한이 지나면 410 Gone을 반환합니다. 1일짜리 R2 수명 주기 규칙이 안전망으로 객체를 물리적으로 제거합니다.
AI 에이전트를 위한 설계
많은 언어 모델 에이전트가 fetch나 브라우징 도구를 부를 줄 알지만, 붙여 넣은 URL을 알아서 내려받지는 않습니다 — 불투명한 문자열로 취급하죠. 각 결과 줄의 Agent prompt 버전은 현재 언어로 짧은 지시("이 파일을 내려받아 읽어 주세요")를 URL 앞에 붙여, 모델이 URL 옆의 명확한 지시를 보고 fetch 도구를 꺼내 들게 합니다.
Anti-enumeration
URL ID는 base62 16자(약 95비트 엔트로피)라 살아 있는 링크를 맞힐 확률은 사실상 0입니다. 게다가 /f/*의 404/410마다 KV의 IP별 실패 카운터가 올라갑니다. 10회 실패면 IP는 TTL 30일의 차단 목록에 올라 마커가 만료될 때까지 /f/*와 /api/upload 모두에서 막힙니다.
어떤 파일을 올릴 수 있나요?
어떤 파일이든, 10 MB까지 어떤 크기든. 다운로드가 항상 Content-Disposition: attachment와 X-Content-Type-Options: nosniff로 제공되기 때문에 형식을 제한하지 않습니다 — 브라우저는 렌더링 대신 저장하므로, 올라온 HTML/SVG/JS가 이 오리진에서 스크립트로 실행될 수 없습니다.
제한 및 속도
- 무료: 한 번에 1개 파일. Plus: 배치당 최대 20개.
- 파일당 10 MB(업로드 Function이 강제 — 프런트엔드 상한은 그저 친절).
- 유효 기간: 5분~1시간 사이 아무 값.
- 업로드 한도 — 익명: 10/분, 60/시간, 160/일(IP당); 로그인: 10/분, 50/시간, 200/일; Plus: 30/분, 200/시간, 600/일(계정당, CGNAT 무관).
- 각 한도 창(1분/1시간/24시간)은 그 창을 여는 업로드에 고정됩니다 — UTC 자정도, 어떤 현지 시간대도 아닙니다. 언제 시작하든 창의 예산 전부를 씁니다.
- 버킷이 무료 상한에 다가가면 만료 파일이 자리를 비울 때까지 업로드가
503을 반환합니다 — 복구는 자동입니다.
개인정보
각 URL은 링크를 가진 모두와 공유된 것으로 여기세요. 비공개 저장소가 아닙니다. ID는 사실상 추측 불가이고 차단 목록이 어설픈 무차별 대입을 막지만, URL을 받은 사람은 만료 전까지 누구든 파일을 받을 수 있습니다. IP는 KV 키로 쓰기 전에 해시(SHA-256)하고, R2 객체에는 절대 남기지 않으며, 모든 다운로드를 noindex, nofollow로 제공합니다.