Estoy desarrollando una plataforma donde los usuarios deberían poder crear un hotel a través de un formulario HTML. Dentro del formulario, hay una opción para cargar varios archivos de imagen.
Estoy usando multer para manejar la carga. Mi procedimiento es el siguiente:
Crear directorio 'imágenes'
La carga y el guardado funcionan perfectamente, pero me sale un error cuando intento cargar el siguiente hotel:
Error: ENOENT: no such file or directory, open 'C:\ ...'Las imágenes se almacenan con éxito en el directorio de 'imágenes', pero obviamente, como la aplicación falla, no se hace nada con los archivos, así que tengo que eliminarlos manualmente.
Como esto solo sucede en el segundo intento (al reiniciar la aplicación, funciona de nuevo), asumo que fs.readFileSync se ejecuta antes de que las imágenes terminen de cargarse. No tengo idea ya que multer es parte de mi cadena de enrutadores, la conversión a base64 debería ocurrir DESPUÉS de que todos los archivos se carguen en el servidor.
¿Qué estoy haciendo mal?
Funciones Multer: https://i.stack.imgur.com/Wz167.png Conversión Base64: https://i.stack.imgur.com/oOEmR.png Función de eliminación (ejecutada después de guardar en DB) https://i .stack.imgur.com/PlTvH.png
Aquí hay un fragmento simple para obtener imágenes como base64. Sin almacenarlos en el disco.
const express = require('express'); const multer = require('multer'); const storage = multer.memoryStorage(); const upload = multer({ storage }); const app = express(); app.post('/submit', upload.array('images'), (req, res, next) => { // req.files is array of `images` files // I believe it is a `Buffer` object. const base64Images = req.files.map(image => buffer.toString('base64')); // Ready to save into DB; console.log(base64Images); })