React Native上传图片至AWS S3桶遭遇AccessDenied错误求助
解决AWS S3上传AccessDenied错误的方案
检查IAM权限
确保使用的Access Key对应的IAM用户/角色拥有s3:PutObject权限,且权限策略明确指定目标桶。示例策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::你的桶名/*" } ] }注意资源路径必须包含
/*,否则仅能操作桶本身,无法上传文件。验证桶的CORS配置(前端上传场景)
若为前端直接上传,需确保桶的CORS规则允许请求源和PUT方法:<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>你的前端域名</AllowedOrigin> <AllowedMethod>PUT</AllowedMethod> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>排查桶的存储桶策略
确认桶策略未拒绝PutObject操作,也未设置IP限制等条件拦截当前请求。修正代码中的潜在问题
你的代码存在两处可能影响上传的问题:- 导入与初始化冲突:先
import { S3 } from 'aws-sdk';又const S3 = new AWS.S3();,需统一写法; Body: imageData.toString()会损坏图片二进制数据,直接传入原始数据即可。
修正后的代码示例:
import AWS from 'aws-sdk'; AWS.config.update({ accessKeyId: accesskey, secretAccessKey: secretkey, region: region }); const s3 = new AWS.S3(); const uploadImageToS3 = (imageData, fileName, mime) => { const params = { Bucket: bucketname, Key: fileName, Body: imageData, ContentType: mime }; s3.putObject(params, (err, data) => { if (err) { console.log('Error uploading image:', err); } else { console.log('Image uploaded successfully:', data); } }); };- 导入与初始化冲突:先
确认Access Key有效性
检查Access Key和Secret Key是否正确、未过期,且归属正确的AWS账户。
内容的提问来源于stack exchange,提问作者Sooraj Nayi
相关产品推荐
相关产品推荐

