Compartilhamento Temporário de Arquivo
5 min–1 h · 10 MB máx. · compatível AI Agent
Como funciona
Cada arquivo vai para um bucket Cloudflare R2 pelo endpoint de Pages Functions em /api/upload, junto com a vida útil escolhida. O objeto é gravado com um carimbo expiresAt próprio; /f/<id> o lê a cada download e devolve 410 Gone quando vence. Uma regra de ciclo de vida do R2 de 1 dia remove fisicamente o objeto como retaguarda.
Projetado para agentes de IA
Muitos agentes de modelos de linguagem sabem chamar fetch ou uma ferramenta de navegação, mas não baixam por iniciativa própria uma URL colada — tratam-na como texto opaco. A variante Agent prompt de cada linha antepõe uma instrução curta (“Baixe e leia este arquivo”) no idioma ativo, para o modelo ver uma diretiva clara ao lado da URL e usar sua ferramenta de download.
Anti-enumeration
Os IDs das URLs têm 16 caracteres base62 (~95 bits de entropia), então a chance de adivinhar um link vivo é essencialmente zero. Além disso, cada 404/410 de /f/* incrementa um contador de erros por IP no KV. Após 10 erros o IP entra numa lista de banimento com TTL de 30 dias e fica bloqueado de /f/* e de /api/upload até o marcador expirar.
O que posso enviar?
Qualquer arquivo, qualquer tamanho até 10 MB. O tipo não é restrito porque os downloads sempre saem com Content-Disposition: attachment e X-Content-Type-Options: nosniff — o navegador salva o arquivo em vez de renderizá-lo, então um HTML/SVG/JS enviado não roda como script nesta origem.
Limites e taxa
- Grátis: 1 arquivo por vez. Plus: até 20 arquivos por lote.
- 10 MB por arquivo (imposto pela Function de upload — o teto do frontend é só cortesia).
- Vida útil: qualquer valor entre 5 minutos e 1 hora.
- Limite de envios — anônimo: 10/min, 60/h, 160/dia (por IP); conectado: 10/min, 50/h, 200/dia; Plus: 30/min, 200/h, 600/dia (por conta, imune a CGNAT).
- Cada janela de limite (1m / 1h / 24h) é ancorada no envio que a abre — não na meia-noite UTC nem em fuso local. Você sempre tem o orçamento inteiro da janela, comece quando começar.
- Quando o balde se aproxima do teto do nível gratuito, os envios retornam
503até arquivos expirados liberarem espaço — a recuperação é automática.
Privacidade
Trate cada URL como compartilhada com quem tiver o link, não como armazenamento privado. O id é impossível de adivinhar na prática e a lista de banimento barra força bruta casual, mas qualquer pessoa com a URL pode baixar o arquivo até expirar. Fazemos hash dos IPs (SHA-256) antes de usá-los como chave KV, nunca os persistimos no objeto R2 e servimos cada download com noindex, nofollow.