How are you? [Hola. ¿Cómo están?]
I’m watching bluuweb’s node course and in it they do a practical exercise ((I mean exactly this one: https://www.youtube.com/watch?v=iU3mnrw48I0&list=PLCB86r2r1iKKmz21UIlZjQieBF7ljb6Qu&index=80).
[Estoy viendo el curso de node de bluuweb y en él realizan un ejercicio practico (me refiero exactamente a este: https://www.youtube.com/watch?v=iU3mnrw48I0&list=PLCB86r2r1iKKmz21UIlZjQieBF7ljb6Qu&index=80).]
This is the code for minute 39 specifically: [Este es el código de específicamente el minuto 39:]
const formidable = require("formidable");
const cambiarFotoPerfil = (req, res) => {
const form = new formidable.IncomingForm();
form.maxFileSize = 5 * 1024 * 1024;
form.parse(req, async (err, fields, files) => {
try {
if (err) {
throw new Error('Falló formidable')
}
console.log(fields);
console.log(files.myFile)
const file = files.myFile;
if(file.originalFilename === ""){
throw new Error('No se seleccionó ninguna imagen')
}
if(!['image/jpeg', 'image/png'].includes(file.mimetype)){
throw new Error('Por favor agrega una imagen con formato .jpg o png')
}
if(file.size > 5 * 1024 * 1024){
throw new Error('La imagen debe ser de máximo 5MB')
}
req.flash("mensajes", [{ msg: "Ya se subió la imagen" }]);
return res.redirect('/perfil');
} catch (error) {
console.log(error);
req.flash("mensajes", [{ msg: error.message }]);
return res.redirect("/perfil");
}
});
};
module.exports = {
formPerfil,
cambiarFotoPerfil
}
This is the HTML: [Este es el HTML]
<form action="/perfil?_csrf={{csrfToken}}" method="post" enctype="multipart/form-data">
{{!-- <input type="hidden" name="_csrf" value="{{csrfToken}}" /> --}}
<input class="form-control form-control-sm mb-2" type="file" id="formFileSm" name="myFile" />
<button class="btn btn-dark">Cambiar foto</button>
</form>
The problem is that if I don’t send any files it jumps to the error ‘Failed great’ and ignores the rest. And when I send a jpg or png file I get the error ‘Please add an image in .jpg or png format? although it is supposed to comply with the format.
[El problema es que si no envío ningún archivo me salta al error ‘Falló formidable’ e ignora el resto. Y cuando envío un archivo jpg o png me salta al error ‘Por favor agrega una imagen con formato .jpg o png? aunque se supone que cumple con el formato.]
I tried to remove the code: [Intenté eliminar el código:]
if (err) {
throw new Error('Falló formidable')
}
but it jumped to an error ‘Cannot read properties of undefined (reading ‘originalFilename’)’ [pero saltaba a un error ‘Cannot read properties of undefined (reading ‘originalFilename’)’].
I also tried uninstalling formidable and reinstalling it but nothing changed. I don’t know if it’s a syntax problem or a formidable bug. [También intenté desisntalar formidable y volverlo a instalar, pero nada cambió. No sé si es problema en la sintaxis o un fallo de formidable.].
I would appreciate your help. [Les agradecería mucho su ayuda].
2
Answers
How are you?
Finally I found a solution. This is my new script:
If you can see, in const file = files.myFile[0]; I added the [0].
Looks like the error you get is caused on the line:
You’re trying to access a
originalFilename
property of afile
object. But as far as I can tell,file
does not exist in your code. Earlier, in yourform.parse
function you are passingfiles
argument:I’m guessing that this is only a typo: use either
file
orfiles
.