Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

548
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda