Я сохранил путь к изображению в mongodb, и теперь, когда я использую его в качестве источника изображения, изображение кажется сломанным.
В контроллере загрузки я создаю сообщение со свойством аватара, которое создает путь к изображению:
выгрузка. js
exports.uploadAvatar = async (req, res) => {
const url = `${req.protocol}://${req.get('host')}`;
const { title, content } = req.body;
const newPost = new Post({
title,
content,
avatar: `${url}/client/src/uploads/${req.file.filename}`,
});
await newPost.save((error, post) => {
if (error) {
return res.status(400).send({
status: false,
message: error,
});
}
res.status(201).json({
message: 'File is uploaded.',
post: {
avatar: post.avatar
}
});
});
};
В маршрутах я передаю промежуточное ПО multer для загрузки контроллера Avatar, а также делаю конфигурации multer:
маршруты. js
const multer = require('multer');
const { uploadAvatar } = require('../controllers/upload');
const FILE_PATH = 'client/src/uploads';
const storage = multer.diskStorage({
destination: (req, file, cb) => cb(null, FILE_PATH),
filename: (req, file, cb) => {
const fileName = file.originalname.toLowerCase().split(' ').join('-');
cb(null, `${Math.floor(Math.random() * 10000)}-${fileName}`);
},
});
const upload = multer({storage: storage});
router.post('/upload-avatar', upload.single('avatar'), uploadAvatar);
Затем в приложении. js Я получаю сообщение и заполняю переменную состояния profileImg путем указания пути к изображению, из Свойство аватара объекта mongodb.
Приложение. js
export default () => {
const [profileImg, setProfileImg] = React.useState([]);
React.useEffect(() => {
axios.get(`http://localhost:8080/api/get-avatar`)
.then(res => {
setProfileImg(res.data.posts[0]);
// console.log(res.data.posts[0])
})
}, []);
return (
<div className="avatar">
<img src={profileImg.avatar} />
</div>
);
};
документ mongodb
{
"avatar":"http://localhost:8080/client/src/uploads/5914-irina.jpg",
"title":"Lorem Ipsum",
"content":"ed ut perspiciatis unde omnis iste.",
}
Структура проекта
client
public
src
uploads
// my image
App.js
index.js
controllers
models
routes
server
pachage.json
Проблема в том, что изображение в компоненте реакции не отображается, и в консоли я получаю эту ошибку:
GET http://localhost:8080/client/src/uploads/some-image.jpg 404 (Not Found)