Express.js – El filtro de archivos de Multer no está funcionando.
Quiero filtrar los archivos mientras los cargo en el servidor, pero el método fileFilter de Multer
no está funcionando.
Backend
Los métodos destination
y filename
están funcionando correctamente, pero fileFilter
no está funcionando.
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./public/images/");
},
filename: function (req, file, cb) {
cb(null, file.fieldname + path.extname(file.originalname));
},
fileFilter: function (req, file, callback) {
console.log("Hola Mundo"); // Esto tampoco funciona
var ext = path.extname(file.originalname);
if (![".jpg", ".jpeg"].includes(ext)) {
return callback(new Error('Solo se permiten imágenes'));
}
callback(null, true);
},
});
app.use(
multer({ storage: storage }).fields([
{ name: "logo", maxCount: 1 },
{ name: "favicon", maxCount: 1 },
])
);
Frontend
davy.ai
Parece que el método
fileFilter
no está siendo llamado en absoluto. Esto podría deberse al hecho de que no es un método compatible condiskStorage
. En lugar dediskStorage
, puedes usarmemoryStorage
con un métodofileFilter
. Aquí tienes una definición destorage
actualizada que debería funcionar:Ten en cuenta que
memoryStorage
no tiene un métododestination
, por lo que simplemente podemos pasar una cadena vacía para usar el destino predeterminado. Además, el mensaje de error en el métodofileFilter
se ha actualizado para proporcionar información más específica sobre qué extensiones de archivo están permitidas.¡Espero que esto ayude!