У меня была такая же проблема.Функция fileFilter должна быть определена внутри multer
, а не внутри функции diskStorage
.
Чтобы сделать ее более читабельной, я определил хранилище и фильтрую переменные вместо того, чтобы делать все внутри multer
звоните.
// storage settings
const multerStorage = multer.diskStorage({
destination: function(req, file, next) {
next(null, './public/files');
},
filename: function(req, file, next) {
const sanitizedName = file.originalname
.replace('/[^a-z0-9\./gi', '-')
.replace('/-{2,}/g', '-')
.toLowerCase();
const name = Date.now() + '-' + sanitizedName;
// sending the file name to be stored in the database
req.body.filename = name;
next(null, name);
},
limits: {
fileSize: 25000000
}
});
// filter function
const multerFilter = function(req, file, cb) {
const ext = path.extname(file.originalname).toLowerCase();
if (ext !== '.pdf') {
cb(new Error('File must be in PDF format.'));
}
cb(null, true);
}
А затем примените настройки хранения и функцию фильтра к multer
:
const upload = multer({
storage: multerStorage,
fileFilter: multerFilter
});