10.7 - Guardando Tesouros - Storage

E aí, caçador(a) de tesouros digitais! Já aprendemos a guardar informações estruturadas — tipo texto, números e datas — nas nossas tabelas, e a controlar quem vê o quê usando Auth e RLS. Mas e aquela outra galera de arquivos que deixa a web tão interessante? Fotos de perfil, memes, vídeos, áudios, PDFs… onde será que a gente armazena esses arquivos?

A resposta simples é: não no banco de dados! Guardar arquivos grandes diretamente lá pode deixar tudo lento e pesado. Para isso, precisamos de um espaço próprio, um cofre digital para esses “tesouros” maiores e mais variados. E é aí que o Supabase Storage entra em ação, trazendo mais um superpoder pro nosso QG!


A Missão: Um Cofre Seguro para Seus Arquivos

O Supabase Storage é um espaço gigantesco e seguro, feito sob medida para guardar qualquer tipo de arquivo, integrado ao seu projeto Supabase, quase como um Google Drive ou Dropbox próprio para você.

Ele serve para armazenar:

  • Imagens: Fotos de perfil, banners, memes...

  • Vídeos: Clipes, tutoriais...

  • Áudios: Podcasts, músicas, gravações...

  • Documentos: PDFs, planilhas, textos...

  • E tudo mais que seu app precisar guardar!

Por que usar Storage e não o banco?

  • Desempenho: Bancos de dados são melhores para dados organizados, não para arquivos grandes.

  • Escalabilidade: Serviços de storage são projetados para armazenar e entregar milhões de arquivos de forma rápida e eficiente.

  • Custo: Armazenar arquivos em storage costuma ser mais barato do que manter tudo no banco de dados.

  • Entrega rápida: O Supabase Storage usa CDN para entregar arquivos rapidinho em qualquer lugar do mundo.


Como Funciona o Supabase Storage (Resumo)

O Storage é organizado em Buckets — pense neles como pastas ou cofres dentro do seu Storage.

  1. Buckets: Crie buckets para organizar seus arquivos, por exemplo: avatares, imagens_posts, documentos.

  2. Arquivos (Objetos): Dentro do bucket ficam os arquivos, chamados de objetos, cada um com um nome único (pode ter subpastas, tipo usuario123/foto.jpg).

  3. Políticas de Acesso: Como o RLS nas tabelas, o Storage tem suas políticas para controlar quem pode ler, enviar, apagar arquivos e até listar o conteúdo.

  4. API de Storage: Você interage com o Storage usando a API do Supabase — funções para upload, download, obter URLs públicas e mais.


Explorando o Storage no Painel Supabase

  1. No painel do seu projeto, clique em Storage (ícone de caixa 🗄️).

  2. Clique em New Bucket para criar uma nova pasta.

    • Dê um nome único (ex: fotos-perfil).

    • Defina se o bucket será público ou não (se for público, qualquer pessoa com o link pode acessar os arquivos, então cuidado!).

  3. Dentro do bucket, você pode enviar arquivos direto pelo painel com "Upload file".

  4. Na aba Policies, você configura quem pode fazer o quê (leitura, escrita, exclusão) para cada bucket, usando regras similares ao RLS.


Na Prática: Guardando Fotos de Perfil

Vamos imaginar que seu app precisa guardar as fotos de perfil dos usuários.

  1. Crie um bucket chamado avatares e deixe ele privado.

  2. Configure as políticas:

    • Usuários autenticados podem ler os avatares.

    • Usuários autenticados podem fazer upload apenas de arquivos com nomes que comecem com seu auth.uid() (ex: uid123/foto.png).

    • Usuários podem apagar seus próprios arquivos (verificando que o nome do arquivo começa com o próprio UID).

  3. Na sua tabela usuarios, crie uma coluna para guardar o caminho do arquivo do avatar, tipo caminho_avatar.

  4. No seu código:

    • Ao enviar a foto, faça o upload com supabase.storage.from('avatares').upload(...), nomeando o arquivo com o UID do usuário.

    • Salve o caminho retornado no banco na coluna caminho_avatar.

    • Para mostrar a imagem, pegue esse caminho e use getPublicUrl() ou createSignedUrl() para obter o link e exibir no frontend.


Com isso, seu QG Supabase tem um lugar especial e seguro para guardar todos os seus tesouros digitais, mantendo o banco de dados leve e rápido.

Last updated