174 lines
4.4 KiB
Markdown
174 lines
4.4 KiB
Markdown
# 🔧 Solução: Erro ao Adicionar Fotos
|
||
|
||
## ✅ Bucket Criado com Sucesso!
|
||
Vejo na imagem que o bucket `catalogo` foi criado e está marcado como **Public**. Perfeito! 👍
|
||
|
||
## ❌ O Problema
|
||
Faltam as **políticas de segurança (RLS)** que permitem upload, update e delete.
|
||
|
||
## 🚀 Solução Rápida (2 minutos)
|
||
|
||
### Passo 1: Executar SQL
|
||
|
||
1. No Supabase, clique em **SQL Editor** (menu lateral esquerdo)
|
||
2. Clique em **"New Query"**
|
||
3. Cole o código abaixo:
|
||
|
||
```sql
|
||
-- Remover políticas antigas se existirem
|
||
DROP POLICY IF EXISTS "Permitir leitura pública catalogo" ON storage.objects;
|
||
DROP POLICY IF EXISTS "Permitir upload catalogo" ON storage.objects;
|
||
DROP POLICY IF EXISTS "Permitir update catalogo" ON storage.objects;
|
||
DROP POLICY IF EXISTS "Permitir delete catalogo" ON storage.objects;
|
||
|
||
-- 1. Leitura pública
|
||
CREATE POLICY "Permitir leitura pública catalogo"
|
||
ON storage.objects FOR SELECT
|
||
USING (bucket_id = 'catalogo');
|
||
|
||
-- 2. Upload
|
||
CREATE POLICY "Permitir upload catalogo"
|
||
ON storage.objects FOR INSERT
|
||
WITH CHECK (bucket_id = 'catalogo');
|
||
|
||
-- 3. Update
|
||
CREATE POLICY "Permitir update catalogo"
|
||
ON storage.objects FOR UPDATE
|
||
USING (bucket_id = 'catalogo');
|
||
|
||
-- 4. Delete
|
||
CREATE POLICY "Permitir delete catalogo"
|
||
ON storage.objects FOR DELETE
|
||
USING (bucket_id = 'catalogo');
|
||
```
|
||
|
||
4. Clique em **"Run"** ou pressione **F5**
|
||
5. Aguarde a mensagem de sucesso
|
||
|
||
### Passo 2: Testar
|
||
|
||
1. Volte para o sistema (recarregue a página se necessário)
|
||
2. Acesse **Site / Catalogo**
|
||
3. Clique no botão **"Fotos"** de qualquer produto
|
||
4. Clique em **"Adicionar Nova Foto"**
|
||
5. Selecione uma imagem
|
||
6. Deve funcionar! ✅
|
||
|
||
## 🔍 Como Verificar se as Políticas Foram Criadas
|
||
|
||
Execute este SQL para verificar:
|
||
|
||
```sql
|
||
SELECT
|
||
policyname,
|
||
cmd as "Comando",
|
||
CASE
|
||
WHEN cmd = 'SELECT' THEN 'Leitura'
|
||
WHEN cmd = 'INSERT' THEN 'Upload'
|
||
WHEN cmd = 'UPDATE' THEN 'Atualização'
|
||
WHEN cmd = 'DELETE' THEN 'Exclusão'
|
||
END as "Tipo"
|
||
FROM pg_policies
|
||
WHERE tablename = 'objects'
|
||
AND schemaname = 'storage'
|
||
AND policyname LIKE '%catalogo%'
|
||
ORDER BY policyname;
|
||
```
|
||
|
||
**Resultado esperado:** 4 políticas (SELECT, INSERT, UPDATE, DELETE)
|
||
|
||
## 🐛 Se Ainda Não Funcionar
|
||
|
||
### 1. Verifique o Console do Navegador
|
||
1. Pressione **F12** no navegador
|
||
2. Vá na aba **Console**
|
||
3. Tente fazer upload novamente
|
||
4. Veja a mensagem de erro
|
||
|
||
### 2. Mensagens de Erro Comuns
|
||
|
||
**"new row violates row-level security policy"**
|
||
- **Causa:** Políticas RLS não foram criadas
|
||
- **Solução:** Execute o SQL acima novamente
|
||
|
||
**"Payload too large"**
|
||
- **Causa:** Arquivo maior que 5MB
|
||
- **Solução:** Use uma imagem menor
|
||
|
||
**"Invalid file type"**
|
||
- **Causa:** Tipo de arquivo não permitido
|
||
- **Solução:** Use apenas JPEG, PNG, WebP ou GIF
|
||
|
||
**"Network error" ou "Failed to fetch"**
|
||
- **Causa:** Servidor offline
|
||
- **Solução:** Verifique se o servidor está rodando
|
||
|
||
### 3. Verificar Servidor
|
||
|
||
No terminal, veja se há erros:
|
||
|
||
```bash
|
||
# Verificar se está rodando
|
||
curl http://localhost:5000/api/produtos
|
||
|
||
# Ver logs em tempo real
|
||
tail -f logs/*.log
|
||
```
|
||
|
||
## 📊 Estrutura Esperada
|
||
|
||
Depois do upload bem-sucedido, você verá no Supabase Storage:
|
||
|
||
```
|
||
catalogo/
|
||
└── produto_{id}/
|
||
├── 1729765432123-foto1.jpg
|
||
├── 1729765433456-foto2.png
|
||
└── 1729765434789-foto3.webp
|
||
```
|
||
|
||
## ✅ Melhorias Implementadas
|
||
|
||
Atualizei o código para:
|
||
- ✅ Validar tipo de arquivo (JPEG, PNG, WebP, GIF)
|
||
- ✅ Validar tamanho (máx 5MB)
|
||
- ✅ Mostrar mensagem de erro específica
|
||
- ✅ Limpar input após upload
|
||
- ✅ Logs detalhados no console
|
||
|
||
## 🎯 Próximos Passos
|
||
|
||
Depois que funcionar:
|
||
|
||
1. **Teste a Galeria no Site**
|
||
- Abra: `http://localhost:5000/site/`
|
||
- Clique em um produto
|
||
- Veja se as fotos extras aparecem
|
||
|
||
2. **Teste Exclusão de Fotos**
|
||
- Volte ao painel admin
|
||
- Abra "Fotos" de um produto
|
||
- Passe o mouse sobre uma foto
|
||
- Clique no "×" vermelho
|
||
|
||
3. **Verificar Performance**
|
||
- As fotos carregam rápido?
|
||
- A galeria funciona suavemente?
|
||
|
||
## 📝 Checklist
|
||
|
||
- [ ] Bucket `catalogo` criado ✅ (você já fez!)
|
||
- [ ] Bucket marcado como Public ✅ (você já fez!)
|
||
- [ ] Executar SQL das políticas RLS
|
||
- [ ] Testar upload de foto
|
||
- [ ] Ver foto no Storage do Supabase
|
||
- [ ] Ver foto na galeria do site
|
||
|
||
---
|
||
|
||
**Após executar o SQL das políticas, deve funcionar perfeitamente!** 🚀
|
||
|
||
Se ainda tiver problemas, compartilhe:
|
||
1. Mensagem de erro do console do navegador (F12)
|
||
2. Screenshot da aba "Policies" do bucket no Supabase
|