我在尝试使用preSignedUrl将图像上传到aws s3 bucket时收到400个错误请求.出了什么问题



我在后台为我的bucket和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});
})

})

前端代码:异步函数句柄Submit(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);
}

错误是由区域引起的。在后端添加区域属性修复了问题:

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

最新更新