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

Unity游戏向AWS上传文件遇400错误,表单key参数设置疑问

AWS S3 文件上传 400 错误排查:Key 参数设置分析

看起来你在Unity游戏向AWS S3上传文件时遇到了400错误,先给你吃个定心丸:你设置key: AffectivaLogs/${filename}的语法本身是正确的——AWS S3的POST表单上传确实支持用${filename}变量来保留上传文件的原始名称,把文件归类到AffectivaLogs/前缀下的写法完全符合规范。

那为什么会返回400错误呢?通常这类错误是请求不符合S3的表单上传要求,下面是几个常见的排查方向:

1. 预签名表单的策略(Policy)配置不匹配

S3的POST上传依赖预签名的Policy文档来限制请求的合法性,你需要确认:

  • 生成预签名表单时,Policy里是否包含了key的匹配条件,比如:
    ["starts-with", "$key", "AffectivaLogs/"]
    
    如果Policy里限制了key必须以特定前缀开头,而你的设置不符合这个规则,就会直接返回400。
  • 检查Policy的签名是否有效,有没有过期,或者签名使用的AWS密钥是否拥有s3:PutObject等必要权限。

2. 表单参数不完整或格式错误

AWS POST上传需要多个必填参数,少一个或者格式不对都会触发400:

  • 确保你已经将所有必要参数添加到表单中,比如policy、signature、x-amz-date(如果使用签名版本4)、x-amz-credential等,这些参数通常由后端生成预签名表单时提供。
  • 注意参数的大小写,比如key必须是小写,不能写成Key,参数名写错也会导致请求失败。

3. ${filename}变量未被正确解析

如果你的Unity代码是手动构建表单数据,需要确认:

  • /${filename}这个占位符没有被HTTP库转义(比如变成%24%7Bfilename%7D),如果实际发送的key值是字面量AffectivaLogs/${filename}而不是替换成真实的文件名,S3会因为不符合Policy规则而拒绝请求。
  • 可以在Unity里打印出发送的表单数据,检查key的实际值是否正确替换成了目标文件名。

4. S3桶的CORS配置问题

如果你的Unity应用是从前端(比如WebGL)发起请求,需要检查S3桶的CORS规则:

  • 是否允许你的应用域名(或测试用的localhost)发起POST请求。
  • 是否允许包含key在内的必要表单字段,比如在CORS规则里添加AllowedHeaders为*(测试阶段)或者明确列出需要的头部。

快速排查建议

你可以先用Postman或curl手动模拟表单上传请求:

  1. 把Unity里构建的所有表单参数复制到Postman的表单数据中。
  2. 上传一个测试文件,发起POST请求到S3的上传端点。
    • 如果Postman也返回400,说明问题出在AWS的配置(Policy、权限、CORS)上。
    • 如果Postman成功,那问题大概率在Unity的代码里,比如参数拼接错误、变量未替换等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:22:33