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

Unity上传图片至AWS S3桶时出现403错误如何解决?

解决Unity连接AWS S3时的403禁止错误

Postman测试正常但Unity报错,说明后端(S3/Lambda/网关)配置无问题,问题出在Unity的请求实现上,以下是关键排查和修复方向:

  • 请求方法不匹配
    你代码中使用UnityWebRequest.Put,但如果Postman调用接口用的是POST方法(多数上传类API网关接口会采用POST),IAM策略或网关配置可能仅允许POST请求,导致Put请求被拒绝。修改请求方法为POST:

    UnityWebRequest getUrlRequest = UnityWebRequest.Post(Constants.ENDPOINT_UPLOAD, payload);
    
  • 缺失必要请求头
    Postman会自动添加Content-Type: application/json这类标准头,但Unity的WebRequest默认可能未设置。后端需要该头解析payload,缺失会触发权限校验失败。添加对应请求头:

    UnityWebRequest getUrlRequest = UnityWebRequest.Post(Constants.ENDPOINT_UPLOAD, payload);
    getUrlRequest.SetRequestHeader("Content-Type", "application/json");
    // 若你的API网关要求API密钥,补充添加对应头:
    // getUrlRequest.SetRequestHeader("X-API-Key", "你的API密钥");
    
  • Payload编码处理问题
    直接传递字符串payload可能存在编码偏差,建议显式通过字节流设置上传内容:

    byte[] payloadBytes = Encoding.UTF8.GetBytes(payload);
    UnityWebRequest request = new UnityWebRequest(Constants.ENDPOINT_UPLOAD, "POST");
    request.uploadHandler = new UploadHandlerRaw(payloadBytes);
    request.downloadHandler = new DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json");
    // 需API密钥则补充对应头
    yield return request.SendWebRequest();
    
  • 校验请求内容一致性
    对比Unity打印的payload和Postman中发送的JSON内容,确保完全一致(比如文件名格式、base64字符串完整性),内容差异可能导致后端无法生成有效签名或通过权限校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:47:37