У меня проблема с загрузкой файла изображения на мой сервер, я смотрел туториал на ютубе про multer и делаю точно то же самое что и в туториале и по какой-то причине получаю ошибку: ("TypeError: Cannot read property ' путь" неопределенного"). Я погуглил об ошибке и нашел, что у некоторых людей такая же проблема, и я попытался решить ее, как они, но у меня это не сработало.
Это мой код:
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.info(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 не распознал или даже не получил файл изображения. что я делаю не так, что мультер не получает файл?
Может быть проблема в имени файла, которое вы даете файлу, вызывая сбой multer и не прикрепляя свойство файла к объекту запроса. Ни Linux, ни Windows не поддерживают имена файлов с двоеточиями, что создает new Date().toISOString()
.
@Vitalii Привет, я изменил, все равно не работает.
@ Джим Нильссон. Я удалил новый ``` Date().toISOString() ``` все еще multer не распознает req.file
Вы также убедились, что каталог ./public/images/profilePictures
существует и что путь правильный?
@JimNilsson это мой каталог: ("Project/(здесь находится app.js) public/images/profilePictures") да, этот каталог существует, но я не уверен, правильно ли я написал этот код
@Pengin Покажите нам древовидную структуру вашего каталога.
@RichardRublev D:\Coding\Store/public\images\profilePictures
Я изменил пункт назначения на ./uploads
, у меня все работает
Привет, у вас есть лишние пробелы вокруг
=
войдитеenctype = "multipart/form-data"
, попробуйте изменить наenctype = "multipart/form-data"