Skip to main content

Configuración Cloudinary

Este módulo configura e integra el servicio de almacenamiento de imágenes Cloudinary con el backend. Incluye una función personalizada para subir imágenes directamente y un almacenamiento compatible con multer para facilitar la carga desde formularios.


🔍 Ubicación

src/config/cloudinary.ts


📦 Dependencias utilizadas

import { v2 as cloudinary } from 'cloudinary';
import { CloudinaryStorage } from 'multer-storage-cloudinary';
  • cloudinary: SDK oficial para interactuar con el servicio Cloudinary.
  • multer-storage-cloudinary: Adaptador para usar Cloudinary como almacenamiento con multer.

🔧 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!,
});
Variable de entornoDescripción
CLOUDINARY_CLOUD_NAMENombre del Cloud en tu cuenta Cloudinary.
CLOUDINARY_API_KEYClave pública de la API de Cloudinary.
CLOUDINARY_API_SECRETClave privada de la API de Cloudinary.

El operador ! en TypeScript indica que se espera que la variable esté definida.


📤 Función: subirImagenCloudinary

Sube una imagen a Cloudinary manualmente desde una ruta de archivo local.

export const subirImagenCloudinary = async (filePath: string) => {
const result = await cloudinary.uploader.upload(filePath, {
folder: 'productos',
});
return result.secure_url;
};
ParámetroTipoDescripción
filePathstringRuta local del archivo a subir.

🔁 Retorna: una Promise<string> con la URL segura (https) de la imagen subida.

⚠️ Si ocurre un error, se lanza una excepción y se imprime en consola.


🗂️ Almacenamiento Cloudinary para multer

Este storage se usa para manejar cargas directas desde formularios usando multer.

const storage = new CloudinaryStorage({
cloudinary,
params: async (req, file) => {
return {
folder: 'productos',
format: 'jpg',
public_id: `${Date.now()}-${file.originalname}`,
};
},
});
CampoDescripción
folderCarpeta de destino en Cloudinary.
formatFormato forzado de la imagen (jpg).
public_idNombre público generado automáticamente basado en timestamp y filename.

Este storage se puede usar en el middleware multer como:

import multer from 'multer';
import { storage } from './config/cloudinary';

const upload = multer({ storage });

🚀 Exportaciones

export { cloudinary, storage };

Exporta:

  • cloudinary: la instancia configurada de Cloudinary.
  • storage: el almacenamiento personalizado para multer.

✅ Ejemplo de uso

Subida manual:

const url = await subirImagenCloudinary("uploads/tmp/imagen.jpg");

Multer middleware:

router.post("/cargar", upload.single("imagen"), (req, res) => {
res.json({ url: req.file.path });
});