У меня есть форма с несколькими полями, одно из которых является полем файла для загрузки изображения.
name = 'john doe'
location = 'Some location'
image = (binary)
Мой вопрос заключается в том, как проверить этот файл изображения для обоих времен, т.е. СОЗДАТЬ И ОБНОВИТЬ.
Для создания каждое поле является обязательным, но для редактирования пользователь может не захотеть обновлять изображение, а только текстовые поля, поэтому он не будет выбирать файл изображения
router.post('/user', upload.single('image'), userRoute);
Я сделал промежуточное ПО как это, но это не дает должного результата проверки. Давайте предположим, что пользователь выбрал изображение и нажал кнопку отправки, тогда я получу подобное в req.file.
{ fieldname: 'image',
originalname: 'images (2).jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'uploads/top-level',
filename: 'images (2)-1583345397445.jpg',
path: 'uploads\\top-level\\images (2)-1583345397445.jpg',
size: 33766 }
, что имеет смысл, но предположим, что пользователь выбрал некоторый zip-файл, который не является типом файла который я хочу, чтобы пользователь представил, поэтому я должен поймать его и показать пользователю, что тип файла не является изображением. Дайте мне знать, если я смогу использовать вышеупомянутое промежуточное программное обеспечение.
router.post('/user', userRoute);
и функция i userRoute Я написал что-то вроде этого, чтобы поймать ошибку
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
// catch error and show to user
} else if (err) {
// catch error and show to user here also
}
// Logic goes here
// and we get the req.body here
})
этого достаточно для создания, где каждое поле является обязательным
Но для редактирования как я могу сохранить данные в базу данных, если пользователь не обновляет изображение, что означает, что я получаю только два поля
- name
- location
Если пользователь выбирает изображение, я сохраню его, в противном случае я пропущу изображение и сохраню только два поля. КАК я могу достичь этого, и если пользователь не выбирает правильный тип изображения, то мне придется показать ошибку пользователю.
вот код мультитера
var upload = multer({
storage: multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/top-level')
},
filename: function (req, file, cb) {
cb(null, file.originalname.split('.')[0] + '-' + Date.now() + path.extname(file.originalname))
}
}),
fileFilter: (req, file, cb) => {
if (file.mimetype == "image/png" || file.mimetype == "image/jpg" || file.mimetype == "image/jpeg") {
cb(null, true);
} else {
return cb(null, false);
}
}
});