multer npm: ошибка типа: не удается прочитать свойство ‘path’ неопределенного

#javascript #node.js #express #mongoose #multer

#javascript #node.js #выражать #мангуст #мультер

Вопрос:

У меня возникла проблема с загрузкой файла изображения на мой сервер, я посмотрел на YouTube учебник о multer, и я делаю точно то же самое, что сделано в учебнике, и по какой-то причине я получаю сообщение об ошибке: («Ошибка типа: не удается прочитать свойство’path’ неопределенного»). Я погуглил в поисках ошибки и обнаружил, что у некоторых людей такая же проблема, и я попытался решить ее так же, как они, но у меня это не сработало.

Это мой код:

 const multer = require('multer');

const storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, './public/images/profilePictures');
  },
  filename: function(req, file, cb) {
    cb(null, new Date().toISOString()   file.originalname);
  }
});

const fileFilter = (req, file, cb) => {
  // reject a file
  if (file.mimetype === 'image/jpg' || file.mimetype === 'image/png') {
    cb(null, true);
  } else {
    cb(null, false);
  }
};

const upload = multer({
  storage: storage,
  limits: {
    fileSize: 1024 * 1024 * 5
  },
  fileFilter: fileFilter
});

app.use(express.static('public'))

 

схема изображения и модель:

 const imageSchema = new mongoose.Schema({
    profilePicture: String
})

const Image = new mongoose.model('Image', imageSchema)
 

Мой почтовый маршрут:

 app.post('/changeProfilePic', upload.single('profilePicture'), function(req, res, next){
    console.log(req.file);
   const newImage = new Image({
       profilePicture: req.file.path
   })
   newImage.save()
})
 

Моя форма загрузки HTML-кода:

 <form action="/changeProfilePic" method="POST" enctype = "multipart/form-data">
      <input type="file" name="profilePicture" placeholder="Image" />
      <button class="btn btn-light btn-lg" type="submit">Upload</button>
    </form>
 

и когда я записал значение (req.file), он говорит, что его тип «не определен», так что это должно означать, что multer не распознал или даже не получил файл изображения. что я делаю не так, что малтер не получает файл?

Комментарии:

1. Привет, у вас есть ненужные пробелы вокруг = входа enctype = "multipart/form-data" , попробуйте изменить на enctype="multipart/form-data"

2. Может быть проблема в имени файла, которое вы указываете файлу, что приводит к сбою multer и не прикрепляет свойство file к объекту запроса. Ни Linux, ни Windows не поддерживают имена файлов с двоеточиями в них, что new Date().toISOString() приводит.

3. @Vitalii Привет, я изменил, он все еще не работает.

4. @JimNilsson. Я удалил новый « Date().toISOString () ` ` по-прежнему multer не распознает req.file

5. Вы также убедились, что каталог ./public/images/profilePictures существует и что путь указан правильно?

Ответ №1:

Я изменил назначение на ./uploads отлично работает для меня