You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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限制等条件拦截当前请求。

  • 修正代码中的潜在问题
    你的代码存在两处可能影响上传的问题:

    1. 导入与初始化冲突:先import { S3 } from 'aws-sdk';又const S3 = new AWS.S3();,需统一写法;
    2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:52:18