使用AWS S3 Java示例上传文件时遇301端点错误求助
解决AWS S3上传时的301重定向错误
这个301错误我之前用Java SDK v2操作S3时也踩过坑,核心原因就是你的请求发送到了错误的S3区域端点——S3的规则很明确:不同区域创建的桶,必须使用对应区域的专属端点来访问,否则就会返回这种要求你切换端点的重定向错误。
下面是结合你用的PutObject示例代码的具体解决步骤:
1. 先确认你的S3桶所在的区域
先登录AWS S3控制台找到目标桶,进入「属性」标签页,找到「区域」字段(比如us-west-2、eu-central-1或者中国区的cn-north-1),把这个区域信息记下来,后面要用到。
2. 修改S3Client初始化代码,指定正确区域
你原来的示例代码里,S3Client可能是用默认配置创建的,现在需要明确指定桶所在的区域。比如:
// 替换成你刚才查到的桶的实际区域 Region targetRegion = Region.of("us-west-2"); S3Client s3 = S3Client.builder() .region(targetRegion) .credentialsProvider(DefaultCredentialsProvider.create()) .build();
这样SDK就会自动使用对应区域的S3端点发送请求,从根源避免重定向错误。
3. 特殊情况:AWS中国区或自定义端点
如果你的桶在AWS中国区(比如北京、宁夏区域),或者使用的是私有云环境的S3兼容服务,需要直接指定端点地址:
Region targetRegion = Region.of("cn-north-1"); URI s3Endpoint = URI.create("https://s3.cn-north-1.amazonaws.com.cn"); S3Client s3 = S3Client.builder() .region(targetRegion) .endpointOverride(s3Endpoint) .credentialsProvider(DefaultCredentialsProvider.create()) .build();
额外提醒
- 别依赖S3自动重定向:虽然旧版本SDK可能会自动处理301,但这会增加请求延迟,而且新版本SDK默认关闭了这个自动处理逻辑,所以最好一开始就指定正确区域。
- 顺带确认凭证权限:虽然这个错误是端点问题,但如果凭证没有对应区域的访问权限,也可能出现类似的混淆报错,不过优先解决端点问题就好。
内容的提问来源于stack exchange,提问作者Nunyet Calçada
相关产品推荐
相关产品推荐

