Middleware de Subida a Cloudinary
Este middleware configura dos manejadores de subida de archivos a Cloudinary utilizando la librería multer-storage-cloudinary. Se definen dos destinos distintos: uno para imágenes de productos y otro para imágenes de perfil de usuario, cada uno con su configuración respectiva.
🔍 Ubicación
src/middleware/allCloudinaryUploads.ts
📦 Dependencias utilizadas
import { v2 as cloudinary } from 'cloudinary';
import { CloudinaryStorage } from 'multer-storage-cloudinary';
import multer from 'multer';
- dotenv: para cargar variables de entorno desde config/env.
- cloudinary: cliente oficial de Cloudinary.
- multer-storage-cloudinary: adaptador para usar Cloudinary como almacenamiento de multer.
- multer: middleware de manejo de archivos para Express.
⚙️ Configuración de Cloudinary
cloudinary.config({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
});
Carga las credenciales necesarias desde las variables de entorno (.env).
🗂️ Configuración de almacenamiento
Se definen dos instancias de CloudinaryStorage para organizar imágenes en carpetas separadas:
📁 Almacenamiento para productos
const storageProductos = new CloudinaryStorage({
cloudinary,
params: async () => ({
folder: 'producttrack/productos',
allowed_formats: ['jpg', 'png', 'jpeg', 'webp'],
transformation: [{ width: 500, height: 500, crop: 'limit' }],
}),
});
- Carpeta: producttrack/productos
- Formatos permitidos: jpg, png, jpeg, webp
- Transformación: redimensiona a máximo 500x500 sin recorte forzado
👤 Almacenamiento para perfiles
const storagePerfiles = new CloudinaryStorage({
cloudinary,
params: async () => ({
folder: 'producttrack/perfiles',
allowed_formats: ['jpg', 'png', 'jpeg', 'webp'],
transformation: [{ width: 500, height: 500, crop: 'limit' }],
}),
});
- Carpeta: producttrack/perfiles
- Formatos y transformación: igual que productos
🚀 Exportación de middlewares
export const uploadPerfiles = multer({ storage: storagePerfiles });
export const uploadProductos = multer({ storage: storageProductos });
Estos middlewares pueden ser usados directamente en rutas de Express para procesar subidas:
- uploadPerfiles: subir imágenes a la carpeta perfiles
- uploadProductos: subir imágenes a la carpeta productos
✅ Ejemplo de uso en rutas
import { uploadProductos, uploadPerfiles } from "../middleware/allCloudinaryUploads";
router.post("/subir/producto", uploadProductos.single("imagen"), controlador.guardarProducto);
router.post("/subir/perfil", uploadPerfiles.single("avatar"), controlador.guardarPerfil);
🔐 Recomendaciones
- Asegúrate de tener definidas las variables de entorno: CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET.
- Incluye validaciones de tipo MIME si deseas más seguridad.