Cloudflare R2 é object storage compatível com S3 para arquivos: imagens, PDFs, vídeos temporários, backups e materiais. Ele não substitui o banco de dados do produto; ele guarda bytes e metadados de objeto. A aplicação continua responsável por saber quem pode acessar um arquivo, a qual entidade ele pertence e quando ele deve expirar.
Para um produto criado com vibe coding, R2 resolve uma falha recorrente: salvar arquivos em public/ e depender de novo deploy para trocar uma capa. Com R2, o arquivo tem uma chave versionada, pode ser entregue por domínio próprio e continua rastreável pelo registro file no banco.
R2, banco e CDN: cada um tem uma função
| Camada | Responsabilidade |
|---|---|
| R2 | bytes do objeto, content type, cache e metadata do objeto |
| SurrealDB | registro file, relação com artigo/curso/usuário e regra de domínio |
| Worker/API | autorização, validação, upload, URL pública ou assinada |
| CDN/custom domain | entrega e cache perto do leitor |
Essa divisão impede que uma URL solta vire o único registro de um arquivo. No blog, por exemplo, a capa aponta para R2, mas o file_id, a chave e a relação cover continuam conciliados. Se alguém olhar o objeto diretamente no bucket, os metadados personalizados ajudam a localizar o registro canônico.
Quando R2 faz sentido?
Use R2 para conteúdo binário e coleções que crescem: capas, thumbnails, anexos, PDFs, vídeos para processamento e exportações. Use o banco para atributos consultáveis e permissão. Use KV para cache pequeno e read-heavy. Essa distinção evita tentar carregar uma imagem inteira em uma chave KV ou consultar arquivos por categoria percorrendo um bucket.
Preço: o que entra na conta
Na tabela atual, R2 Standard cobra US$ 0,015 por GB-mês, US$ 4,50 por milhão de operações Classe A (como escrita/listagem) e US$ 0,36 por milhão de operações Classe B (como leitura). O plano inclui 10 GB-mês, 1 milhão de Classe A e 10 milhões de Classe B por mês; o egress para Internet é gratuito. A classe Infrequent Access reduz storage, mas adiciona recuperação e exige permanência mínima de 30 dias.
Para capas e arquivos acessados com frequência, Standard costuma ser a escolha clara. Não escolha Infrequent Access para economizar centavos em uma imagem que o navegador consulta todo dia: a recuperação e a duração mínima mudam a conta. Para material arquivado e pouco lido, faça uma simulação com acesso esperado.
Chaves, cache e versionamento
Uma boa chave explica o domínio e não muda depois de publicada:
content/blog/cloudflare-r2-arquivos-custo/cover-v1.webp
materials/course:abc/01J.../aula-01.pdf
financial/transaction:abc/01J.../comprovante.pdfAo trocar uma capa, crie uma nova chave e atualize a referência no banco. Isso permite cache longo, como public, max-age=31536000, immutable, sem o leitor receber uma imagem antiga. Sobrescrever sempre a mesma key parece mais simples, mas cria depuração difícil em CDN e navegadores.
Upload seguro em cinco passos
- O navegador envia o arquivo para uma rota autenticada ou recebe uma URL de upload limitada.
- A API valida MIME type, tamanho e escopo do usuário.
- O Worker gera a key; o cliente não escolhe caminho livremente.
- A aplicação grava R2, cria/atualiza
filee reconciliacustomMetadatacom o ID do banco. - A relação de domínio define se o arquivo é capa, anexo ou material privado.
[ CONTEÚDO_INTEGRAL_DISPONÍVEL ]
Continuar: processe uploads e eventos sem travar a requisição CLIQUE PARA DESBLOQUEAR A LEITURA
Construindo aplicações robustas com arquitetura de alto nível e infraestrutura otimizada na edge do Cloudflare Workers com SurrealDB.
Segurança de dados e conformidade com privacidade desde o primeiro dia de código com tratamento de estados e sessões resilientes.
Métricas de performance para monitorar a experiência do usuário e otimizar custos operacionais em produção com dashboards estruturados.
Construindo aplicações robustas com arquitetura de alto nível e infraestrutura otimizada na edge do Cloudflare Workers com SurrealDB.
Segurança de dados e conformidade com privacidade desde o primeiro dia de código com tratamento de estados e sessões resilientes.
Métricas de performance para monitorar a experiência do usuário e otimizar custos operacionais em produção com dashboards estruturados.
Prós e contras
Prós: API S3, integração direta com Workers, egress gratuito, consistência forte para escrita/delete e cache por custom domain. Contras: ele não fornece consulta relacional, permissão de negócio nem transformação automática de imagem por si só. Para imagens responsivas, combine R2 com Cloudflare Images; para processamento depois de upload, use Queue.
Checklist de produção
- bucket e prefixo refletem o domínio do arquivo;
- privado e público não compartilham regra de acesso por acidente;
-
Content-TypeeCache-Controlsão definidos; - key é única/versionada;
-
filee metadata de R2 têm reconciliação; - lifecycle remove arquivos temporários;
- upload de cliente não recebe credencial administrativa.
Perguntas frequentes
R2 é um CDN?
R2 é storage. Um custom domain e a CDN da Cloudflare entregam objetos publicamente; ainda assim, você deve definir cache, visibilidade e invalidação.
Posso acessar R2 com SDK S3?
Sim. R2 é compatível com a API S3. Dentro de Workers, o binding é normalmente mais simples e evita distribuir credenciais de API.
R2 substitui banco de dados?
Não. Guarde o arquivo no R2 e a relação, dono, status e permissão no banco.



