一時ファイル共有
5 分–1 時間 · 10 MB 最大 · AI エージェント対応
仕組み
各ファイルは、選んだ有効期間とともに Pages Functions のエンドポイント /api/upload 経由で Cloudflare R2 バケットへ送られます。オブジェクトには独自の expiresAt タイムスタンプが書き込まれ、/f/<id> がダウンロードのたびにそれを読み、期限が過ぎれば 410 Gone を返します。1 日の R2 ライフサイクルルールが保険としてオブジェクトを物理削除します。
AI エージェント向け設計
多くの言語モデルエージェントは fetch やブラウジングツールを呼べますが、貼られた URL を自発的にダウンロードはせず — 不透明な文字列として扱います。各結果行の Agent prompt 版は、短い指示(「このファイルをダウンロードして読んでください」)を現在の言語で URL の前に付けるので、モデルは URL の横に明確な指令を見て、自分の取得ツールに手を伸ばします。
Anti-enumeration
URL の ID は base62 の 16 文字(約 95 ビットのエントロピー)なので、生きているリンクを当てられる確率は実質ゼロです。加えて /f/* の 404/410 のたびに KV の IP 別ミスカウンターが増えます。10 回のミスで IP は TTL 30 日の BAN リスト入りし、マーカーが切れるまで /f/* と /api/upload の両方から締め出されます。
アップロードできるもの
どんなファイルでも、10 MB までなら何でも。ダウンロードは常に Content-Disposition: attachment と X-Content-Type-Options: nosniff 付きで配信されるため、種類は制限しません — ブラウザーは描画せず保存するので、アップロードされた HTML/SVG/JS がこのオリジンでスクリプトとして走ることはありません。
制限とレート
- 無料:一度に 1 ファイル。Plus:1 バッチ最大 20 ファイル。
- 1 ファイル 10 MB(アップロード Function が強制 — フロント側の上限は単なる親切)。
- 有効期間:5 分〜1 時間の任意の値。
- アップロード上限 — 匿名:10/分、60/時、160/日(IP ごと);サインイン:10/分、50/時、200/日;Plus:30/分、200/時、600/日(アカウントごと、CGNAT の影響なし)。
- 各レート制限ウィンドウ(1 分 / 1 時間 / 24 時間)は、それを開いたアップロードを起点に固定されます — UTC の深夜 0 時やローカルタイムゾーンではありません。いつ始めてもウィンドウの全予算が使えます。
- バケツが無料枠の上限に近づくと、失効ファイルが場所を空けるまでアップロードは
503を返します — 回復は自動です。
プライバシー
各 URL はリンクを持つ人全員と共有されたものと考えてください。プライベートストレージではありません。ID は事実上推測不能で、BAN リストが軽い総当たりを止めますが、URL を渡した相手は期限まで誰でもファイルを取得できます。IP は KV のキーに使う前にハッシュ化(SHA-256)し、R2 オブジェクトには決して保存せず、すべてのダウンロードを noindex, nofollow で配信します。