![](/img/trans.png)
[英]I am getting multer error : unexpected field when i was trying to upload files in aws s3 bucket
[英]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.