在 aws s3 上上传图像

问题描述

我正在开发一个 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}` />