Estoy desarrollando un proyecto que consiste en publicar un post y poder subir una imagen de usuario. Usé JS para Front y NodeJs para Back (Multer para cargar imágenes). Tengo un error al hacer una publicación y cargar una imagen en mi DDBB en Mysql. Creé las publicaciones sin ningún error, pero cuando implementé la capacidad de enviar una imagen, obtuve este error:
violación de cadena: la imagen no puede ser una matriz o un objeto
Código:
//Here call the action from PostActions const addPost = (body) => dispatch(createPostAction(body)); const userId = props.credentials?.user.id //Formate the picture const formdata = new FormData(); formdata.append('image', image, userId); const user = post.user; const token = post.token; //Create the post addPost({ title, content, image, userName: post.name, lastName: post.lastName, date: new Date(), userId: user.id, token: token, }); //My route router.post("/", authenticate, fileUpload, async(req, res) => { try { const id = req.body; const image = req.file; res.json(await postControllers.makePost(id, image)) } catch (error) { return res.status(500).json({ message: error.message }); } }); //My controller async makePost(post) { return Post.create(post); }No recomiendo almacenar imágenes en una base de datos mysql ni en ninguna base de datos en general.
La forma más común de manejar la imagen la carga para almacenar una imagen en un sistema de almacenamiento de archivos como Amazon S3 o Cloudfront, y luego almacena la URL de la imagen que recibe (que generalmente es la ruta del archivo a la imagen y es una cadena), en la base de datos.
Esto se debe tanto a la optimización del rendimiento como del ancho de banda.
Sin embargo, si desea almacenarlo en su base de datos MySQL, debe almacenarlo como un blob. Ex:
CREATE TABLE 'test'.'pic' ( 'pic' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 'img' LONGBLOB NOT NULL, PRIMARY KEY ('pic') )Esta infracción de cadena podría deberse a que MySQL espera una cadena (ruta a una imagen) y no está configurado para recibir un tipo de blob.
Para probar, intente pasar una cadena como el valor de la clave de la imagen y vea si la publicación se realiza correctamente.