Хорошо, так что multer не несет ответственности за проверку ввода вашей формы, его единственная цель - позволить вам загрузить файл на сервер. Теперь перейдем к проблеме, которую вы пытаетесь решить
- у вас может быть html-проверка в интерфейсе, чтобы убедиться, что пользователь заполняет все поля
required
перед отправкой формы
- вы можете сделать бэкэнд-проверку, чтобы убедиться, что все обязательные поля заполнены
Чтобы использовать 2-й шаг, вы можете использовать функцию, подобную этой
export const setRequired = (...args: any): boolean => {
let isValid = true;
_.forEach(args, value => {
if (isUndefined(value)) isValid = false;
});
return isValid;
};
const isValid: any = setRequired(file, first_name, last_name);
Функция использует машинопись и lodash и проверяет, что все указанные параметры существуют. Поэтому, прежде чем выполнять какие-либо операции в своем бэкэнде, передайте обязательные поля функции, которая будет возвращать логическое значение, чтобы уведомить вас, если все необходимые поля были получены от внешнего интерфейса.
Что касается 2-й части, относящейся к размеру файла и ошибкам типа файла для multer, вы можете попробовать что-то вроде этого
const storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, path.join(__dirname, `path_to_folder`));
},
filename(req, file, cb) {
const ext = path.extname(file.originalname).toLowerCase();
const file_name = uuidv4() + "_" + ext;
cb(null, file_name);
},
});
const upload = multer({
storage,
limits: { fileSize: 2000000 }, // In bytes: 2000000 bytes = 2 MB
fileFilter(req, file, cb) {
const ext = path.extname(file.originalname).toLowerCase();
if (ext !== ".png" && ext !== ".jpg" && ext !== ".jpeg") {
cb(new Error("Error: Unacceptable file format"), false);
} else {
cb(null, true);
}
},
}).any();
router.post("/", (req, res) => {
upload(req, res, async err => {
if (err) {
console.error(err);
// An unknown error occurred when uploading.
// the err object will contain the reason for the multer error
}
if (req.files && req.files[0]) {
// file has been saved
console.log(req.files[0].filename);
}
});
},
);