问题描述
我正在开发一个 mern 堆栈应用程序。现在我想在 aws S3 上上传我的图像,所以我需要指导,如果用户在 s3 上上传图像,那么我如何为该特定用户取回图像。 如果用户上传了个人资料图片,那么我如何为该用户检索图像,因为我将它们存储在 s3 而不是 mongodb 上。我需要指导。
const s3 = new aws.S3({
accessKeyId: "",secretAccessKey: "",region: "",});
const upload = (bucketName,id) =>
multer({
storage: multerS3({
s3,bucket: bucketName,Metadata: function (req,file,cb) {
cb(null,{ fieldName: file.fieldname });
},key: function (req,cb) {
console.log(id)
cb(null,`image-${id}.jpeg`);
ID=''
},}),});
exports.setProfilePic =('/updateuser/updateimg/:id',(req,res)=>{
const uploadSingle = upload("medic18577",req.params.id).single(
"img"
);
uploadSingle(req,res,async (err) => {
if (err)
{ return res.status(400).json({ success: false,message: err.message })};
try {
const user = await User.findById(req.params.id)
if(user){
ID=user.id
console.log(ID)
user.img = req.file.location
//res.status(200).json({ data: req.file.location,msg:'img uploaded' });
await user.save()
res.json(user.img)
}else {
return res.json('User not Found')
}
} catch (err) {
console.error(err.message)
res.status(500).send('Server Error')
}
});
})
解决方法
您可以将上传图像的文件名/密钥存储在您的 mongoDB 中,这样当您想显示它时,您可以将文件名/密钥附加到您的 AWS url。
{
"user": "John","image": "1235.jpg"
}
同时显示:
<img src=`${awsUrl}/${user.image}` />