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

如何为AWS S3预签名POST配置自定义上传域名?

替换AWS S3预签名POST中的默认域名为自定义域名

问题背景

使用Python的boto3调用generate_presigned_post生成S3多部分表单上传的预签名数据时,返回结果中的url字段是S3默认的存储桶域名(如https://my-bucket.s3.amazonaws.com/),需要将其替换为自定义域名。

原生成代码

content_type = "text/csv"
data = s3.generate_presigned_post(
            Bucket="my-bucket",
            Key=path,
            Fields={
                "Content-Type": content_type
            },
            Conditions=[
                {"Content-Type": content_type},
                ["content-length-range", 0, 10 * 1000000]
            ],
            ExpiresIn=300,
        )

原返回结果

{
        "url": "https://my-bucket.s3.amazonaws.com/",
        "fields": {
            "Content-Type": "text/csv",
            "key": "pri...",
            "AWSAccessKeyId": "A....",
            "policy": "e....",
            "signature": "CJR..."
        }
}

解决方案

直接修改返回字典中的url字段即可,具体步骤如下:

  1. 保留原有的预签名POST生成逻辑不变
  2. 在生成数据后,将data['url']的值替换为你的自定义域名

修改后的代码示例

content_type = "text/csv"
data = s3.generate_presigned_post(
            Bucket="my-bucket",
            Key=path,
            Fields={
                "Content-Type": content_type
            },
            Conditions=[
                {"Content-Type": content_type},
                ["content-length-range", 0, 10 * 1000000]
            ],
            ExpiresIn=300,
        )

# 替换为你的自定义域名,注意末尾保留斜杠
data['url'] = "https://your-custom-domain.com/"

关键注意事项

  • 自定义域名需正确配置:通过CNAME记录指向S3存储桶的默认域名,或使用CloudFront等CDN服务关联S3存储桶,确保POST请求能正确路由到目标S3存储桶
  • 签名有效性不受影响:预签名POST的签名基于存储桶、文件路径、上传条件等参数生成,与请求域名无关,只要域名能正确路由到对应存储桶,替换后签名依然有效

内容的提问来源于stack exchange,提问作者Jelle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:48:22