Ir para o conteúdo
Promovaweb

Enviar arquivos para um bucket privado

Revisado em

Prepare o ambiente

Envie arquivos de usuários autenticados e limite a leitura ao diretório de cada identidade de usuário.

  • Projeto de estudo separado dos registros de produção.
  • Conhecimento da trilha Comece aqui.

Prepare o bucket

No Storage do projeto de estudo, crie um bucket chamado documentos e mantenha a opção pública desativada. Configure limite de tamanho e tipos MIME conforme os arquivos aceitos pela aplicação. Um bucket privado exige autorização para leitura, além da autorização de upload.

Separe os caminhos por usuário

Use o UUID da identidade de usuário como primeiro diretório. No SQL Editor, crie políticas específicas para esse bucket:

create policy documentos_inserir on storage.objects
for insert to authenticated with check (
bucket_id = 'documentos'
and (storage.foldername(name))[1] = (select auth.uid())::text
);
create policy documentos_ler on storage.objects
for select to authenticated using (
bucket_id = 'documentos'
and (storage.foldername(name))[1] = (select auth.uid())::text
);

Com o cliente JavaScript inicializado e a sessão autenticada, envie um File recebido pelo formulário:

const { data: { user }, error: authError } = await supabase.auth.getUser()
if (authError || !user) throw new Error('Entre antes de enviar um arquivo.')
const caminho = user.id + '/' + crypto.randomUUID() + '.pdf'
const { error } = await supabase.storage.from('documentos').upload(caminho, arquivo)
if (error) throw error
const { data, error: leitura } = await supabase.storage.from('documentos').download(caminho)
if (leitura) throw leitura

O exemplo pressupõe um PDF escolhido pelo usuário. Confira o tipo no formulário e no bucket. O nome aleatório evita substituir um arquivo existente. As políticas acima não autorizam sobrescrita, exclusão ou atualização.

Confira dois usuários

Envie um documento com a identidade de usuário A. A leitura deve funcionar nessa sessão. Depois entre com a identidade de usuário B e tente baixar o mesmo caminho: a leitura deve ser recusada. Confira também o acesso sem sessão. Não transforme o bucket em público para contornar um erro de política. URLs assinadas dão acesso temporário ao portador do link: compartilhe somente quando esse comportamento fizer parte da aplicação.

Confira o resultado

Execute as conferências descritas no guia e registre ambiente, versão e resultado antes de aplicar em outro projeto.

Fontes consultadas

Procedimento conferido na documentação oficial. A execução em uma instância Supabase não foi realizada nesta revisão.