Как изменить размер изображения при загрузке с помощью `Multer and Sharp` на Node и Express - PullRequest
0 голосов
/ 25 апреля 2020

Я пытался изменить размер своего изображения, когда оно загружается, но у меня ничего не получается. Я использую Node, Expressjs, Mon goose, Multer и Sharp. Как мне изменить его размер при загрузке с Sharp.

Вот мои маршруты создания

router.post('/create', upload.single('cover'), async (req, res, next) => {
 const fileName = req.file != null ? req.file.filename : null
 let witdth = 100;
 let height = 100;

 sharp(req.file)
 .resize(witdth, height).toFile(req.file.path)


 const event = new Event({
 startingDate: req.body.startingDate,
 closingDate: req.body.closingDate,
 title: req.body.title,
 description: req.body.description,
 eventImage: fileName 
})
try {    
  const events = await event.save()
  res.redirect("/events")

  } catch {
   if (event.eventImage != null) {
     removeeventImage(event.eventImage)
   }
    res.render("events/new")
 }
});

и мой путь загрузки

const uploadPath = path.join('public', Event.eventImageBasePath)
const imageMineTypes = ['image/jpeg', 'image/png', 'image/gif']

const upload = multer({ 
  dest: uploadPath,
  fileFilter:  (req, file, callback) => {
  callback(null, imageMineTypes.includes(file.mimetype) )
 }
})

, и это ошибка, что это даю

(node:7447) UnhandledPromiseRejectionWarning: Error: Input file is 
  missing

Пожалуйста, что я здесь не так делаю? любая маленькая помощь будет оценена.

1 Ответ

0 голосов
/ 06 мая 2020

Если вы укажете параметр dest в multer(), он сохранит файл в этом каталоге, и вам придется передать этот каталог в sharp() следующим образом

sharp(req.file.path)

В противном случае вы можете удалить dest и передать буфер в sharp()

sharp(req.file.buffer)

...

 multer({ 
  fileFilter:  (req, file, callback) => {
  callback(null, imageMineTypes.includes(file.mimetype) )
 }
...