我的存储桶使用IAM配置,后台使用nodejs。我整晚都在寻找解决方案。但是找不到答案。
这是我为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});
})})
前端代码:异步函数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);
}发布于 2020-11-12 18:08:33
错误是由区域引起的。在后台添加region属性修复问题:
var s3 = new AWS.S3({
accessKeyId: process.env.ACCESS_KEY_ID,
secretAccessKey: process.env.SECRET_ACCESS_KEY,
region: "ap-south-1"
})https://stackoverflow.com/questions/64797841
复制相似问题