@quadcore-lib/storage-cloudinary
v0.2.0
Published
Driver de `@quadcore-lib/storage-server` que sube y borra imágenes en [Cloudinary](https://cloudinary.com), en reemplazo de `LocalStorageDriver` para producción. Las imágenes se sirven desde el CDN de Cloudinary (`https://res.cloudinary.com/...`), así que
Readme
@quadcore-lib/storage-cloudinary
Driver de @quadcore-lib/storage-server que sube y borra imágenes en Cloudinary, en reemplazo de LocalStorageDriver para producción. Las imágenes se sirven desde el CDN de Cloudinary (https://res.cloudinary.com/...), así que no dependen del disco del servidor.
Instalación
npm install @quadcore-lib/storage-cloudinaryUso
import { QuadcoreStorageModule } from '@quadcore-lib/storage-server';
import { CloudinaryStorageDriver } from '@quadcore-lib/storage-cloudinary';
QuadcoreStorageModule.forRoot({
driver: new CloudinaryStorageDriver({
cloudName: process.env.CLOUDINARY_CLOUD_NAME!,
apiKey: process.env.CLOUDINARY_API_KEY!,
apiSecret: process.env.CLOUDINARY_API_SECRET!,
}),
keyPrefix: 'products', // carpeta dentro de Cloudinary
maxSizeBytes: 5 * 1024 * 1024,
allowedMimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
});Las tres credenciales están en el dashboard de Cloudinary (Settings → API Keys). El apiSecret va solo en el servidor, nunca en el frontend.
Keys
Cloudinary agrega la extensión según el formato, así que la key que genera StorageService (products/123-abc-foto.png) se guarda como public_id sin extensión (products/123-abc-foto). Esa es la key que devuelve POST /storage/upload y la que acepta DELETE /storage/:key. remove también acepta la key con extensión.
API
| Export | Descripción |
|---|---|
| CloudinaryStorageDriver | Implementa StorageDriver (put, getSignedUrl, remove) sobre el SDK cloudinary v2. |
| CloudinaryStorageOptions | cloudName, apiKey, apiSecret (requeridos). |
getSignedUrl devuelve una URL firmada del asset, pero los assets upload son públicos y la URL no vence: expiresInSeconds se ignora.
