Saltar al contenido principal

Almacenamiento de imágenes

Las imágenes de productos se guardan en Supabase Storage usando su API compatible con S3 (@aws-sdk/client-s3). Implementación en api/src/lib/storage.js.

Flujo​

POST /api/products/:id/image (multipart, campo "image")
├─ multer (memoria, máx. 5 MB, JPEG/PNG/WebP/GIF)
├─ nombre aleatorio: <32 hex>.<ext>
├─ PutObject en el bucket
├─ products.image_url = URL pública
└─ borra la imagen anterior (en segundo plano, ignora errores)

URL pública resultante:

https://<proyecto>.supabase.co/storage/v1/object/public/<bucket>/<archivo>

Configuración​

VariableDescripción
SUPABASE_S3_ENDPOINThttps://<proyecto>.storage.supabase.co/storage/v1/s3
SUPABASE_S3_ACCESS_KEYAccess Key ID (Supabase → Storage → S3 Connection)
SUPABASE_S3_SECRET_KEYSecret Access Key
SUPABASE_S3_REGIONOpcional, por defecto auto
SUPABASE_BUCKETPor defecto product-images. Debe ser público

Si faltan las tres primeras, la subida falla con un error 500.

Carpeta /uploads​

La app también sirve estáticos desde api/uploads en /uploads (caché de 7 días). Es un remanente del almacenamiento local de desarrollo; las subidas nuevas van a Supabase Storage.