繁体   English   中英

尝试使用 preSignedUrl 将图像上传到 aws s3 存储桶时出现 400 错误请求错误。 出了什么问题?

[英]I am getting 400 bad request error while trying to upload image to aws s3 bucket using preSignedUrl. What is going wrong?

我在后端为我的存储桶和 nodejs 使用 IAM 配置。 我整晚都在寻找解决方案。 但无法找到答案。

这是我在 aws 上的用户策略配置:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetAccessPoint",
                "s3:PutAccountPublicAccessBlock",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:ListAccessPoints",
                "s3:ListJobs",
                "s3:CreateJob"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-first-bucket-stephengr/*",
                "arn:aws:s3:::my-first-bucket-stephengr",
                "arn:aws:s3:*:041892289571:accesspoint/*",
                "arn:aws:s3:*:041892289571:job/*"
            ]
        }
    ]
}

后端代码:app.get("/api/upload", loginRequired, function(req, res){

  var key = `${req.user.id}/${uuid()}.png`;
  var fileName = key.split("/")[1];

  s3.getSignedUrl("putObject", {
      Bucket: "my-first-bucket-stephengr",
      ContentType: "image/png",
      Key: key

  }, (err, url) => {
      res.json({key, url, fileName});
  })

})

前端代码:async function handleSubmit(e){ e.preventDefault();

    var res = await axios.get("/api/upload", {headers: authHeader()});

    try{
    
        await axios.put(res.data.url, file, {headers: {ContentType: file.type}})

    }catch(err){
        console.log(err)
    }

    console.log(res.data);
}

错误是由于地区。 在后端添加 region 属性解决了这个问题:

    var s3 = new AWS.S3({
    accessKeyId: process.env.ACCESS_KEY_ID,
    secretAccessKey: process.env.SECRET_ACCESS_KEY,
    region: "ap-south-1"
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM