【问题标题】:How to upload a file to AWS S3 from React using presigned URLs如何使用预签名 URL 从 React 将文件上传到 AWS S3
【发布时间】:2025-12-09 17:45:01
【问题描述】:

在我试图将文件上传到 S3 存储桶时,过去两天真的看起来很糟糕。

  1. 我使用 Python 后端来生成预签名 URL。我尝试了generate_presigned_url()generate_presigned_post。前者返回一个url,后者返回一个带有很多参数的json。
  2. boto3 客户端使用具有完全 S3 权限的 IAM 账户的访问密钥进行授权。有问题的存储桶具有允许所有策略和 CORS 配置。
  3. 当我尝试axios.put()axios.post() 时,我得到了大量的各种错误。它们包括:
  • 附件类型应该是多平台/表单数据
  • 权限不足
  • AWS::S3::Errors::InvalidRequest 不支持您提供的授权机制。请使用 AWS4-HMAC-SHA256

发布我拥有的所有不同版本的代码对我来说没有意义。但是任何人都可以请我指出一个真正有效的好教程或发布一些代码 sn-ps 吗?

谢谢

【问题讨论】:

    标签: reactjs amazon-s3 axios boto3


    【解决方案1】:

    我发现了问题所在。在授权我的s3_client时,不仅要提供密钥,还要提供一个额外的配置参数:

    s3_client = boto3.client(
        's3', 
        config=Config(signature_version='s3v4',
            region_name = 'eu-west-2'),
        aws_access_key_id="AKIxxx",
        aws_secret_access_key="xxx"
    )
    

    【讨论】: