#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
отлично работает для меня