Amazon S3 + Django大文件上传出现400 Bad Request错误求助
Django对接S3大文件上传400 Bad Request排查方案
排查S3 Bucket自身CORS配置
Django的CORS_ALLOW_ALL_ORIGINS仅控制自身服务的跨域规则,和S3 Bucket的跨域策略无关。必须在AWS控制台为目标Bucket配置正确的CORS规则:<CORSConfiguration> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <!-- 测试环境临时用,上线后替换为你的前端域名 --> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedHeader>*</AllowedHeader> <ExposeHeader>ETag</ExposeHeader> </CORSRule> </CORSConfiguration>检查签名生成逻辑
核对views.py中的签名代码细节:- 确认AWS区域和Bucket所在的
eu-north-1完全一致 - 文件路径(
key)不能包含未转义的特殊字符 - 签名过期时间设置在合理范围(比如30分钟内)
- 所用AWS密钥必须拥有S3的
PutObject权限
- 确认AWS区域和Bucket所在的
验证前端请求参数
检查jQuery上传代码里的POST参数是否完整且正确:
必须包含key、AWSAccessKeyId、policy、signature、file这几个核心字段,注意参数名大小写不能出错,file必须是合法的文件对象。核对Bucket信息
确认请求的Bucket域名fakebucket.s3-eu-north-1.amazonaws.com中:- Bucket名称和你实际创建的完全一致
- 区域
eu-north-1正确,S3区域域名格式符合要求(部分旧区域的域名格式存在差异)
检查Content-Type匹配
确认前端请求的Content-Type和签名生成时策略中允许的Content-Type一致,若策略里限制了Content-Type范围,前端必须传递对应的类型值。
内容的提问来源于stack exchange,提问作者MrLonely
相关产品推荐
相关产品推荐

