Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

539
Vistas
Actualizando solo una imagen específica en el nodo cloudinario js

Tengo un backend Node Js-Express y Cloudinary para el almacenamiento de imágenes, para agregar un blog a una base de datos. Lo configuré para ingresar los detalles básicos del blog como título, categoría, imágenes, etc. Todas las operaciones CRUD funcionan muy bien hasta ahora.

Un blog tiene múltiples imágenes cargadas con él. Si un usuario tiene que realizar una operación de actualización en un blog determinado, un usuario puede actualizar una o más imágenes en la base de datos. Pero dado que las imágenes se sirven a través del almacenamiento de Cloudinary, las imágenes también deben actualizarse allí. Estoy un poco atascado en cómo asociar la lógica de actualización para lo mismo con cloudinary.

Así es como se ve mi controlador editBlog hasta ahora:

 exports.editBlog = async (req, res) => { const { id } = req.params; const { title, category, content } = req.body; const blogImages = req.files; // There might be only single image passed to edit instead of all 3 images (for example) try { if (!blogImages) { return res.status(400).json({ message: 'No images attached!' }); } const updated_images = await Promise.all(blogImages.map((img) => cloudinaryUploadImage(img.path))); const updates = {}; if (req.body) { updates.title = title; updates.category = category; updates.content = content; updates.images = updated_images; } const updated_data = await Blog.findOneAndUpdate( { _id: id }, { $set: updates }, { new: true } ); if (!updated_data) { res.status(200).json({ message: 'Data does not exist' }); return; } res.status(200).json({ message: 'Data updated', result: updated_data }); } catch (error) { res.status(500).json({ message: 'Internal server error', error }); } };

función cloudinaryUploadImage:

 const cloudinaryUploadImage = async image => { return new Promise((resolve, reject) => { cloudinary.uploader.upload( image , (err, res) => { if (err) return res.status(500).send("upload image error") resolve({ img_url: res.secure_url, img_id: res.public_id }); } ) }) }

No quiero llenar mi almacenamiento en la nube con archivos innecesarios. Si es necesario reemplazar una imagen, entonces la imagen anterior debe eliminarse del almacenamiento.

Realmente agradecería si alguien puede ayudarme a lograr esto con solo algunos ajustes a este código.

Gracias por adelantado

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No es obvio lo que está almacenando en su base de datos para que pueda buscar las imágenes en Cloudinary, pero si está almacenando el img_id (que es la identificación pública en Cloudinary), puede usarlo para anular la imagen original.

Si el usuario está reemplazando ese img_id en particular ( public_id ), puede realizar otra llamada de carga que incluya los parámetros public_id y también debe pasar el parámetro invalidate establecido como true para que la solicitud invalide cualquier versión anterior del activo que se reemplaza. La llamada de carga se vería así:

 cloudinary.uploader.upload( image , public_id: <public_id>, invalidate: true , (err, res) => { . . . }

Esto reemplazará la imagen en Cloudinary con la nueva y la eliminará de cualquier caché en el CDN para que su blog obtenga la última versión.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda