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

已配置CORS仍受阻:Flutter Web无法上传至Firebase Storage

Firebase Storage 上传失败(CORS预请求未通过)解决方案

1. 检查存储桶安全规则

上传操作需要明确的写权限,确保你的Firebase Storage安全规则允许目标域名的写请求:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if request.origin == "https://arptc-connect.web.app";
      allow write: if request.origin == "https://arptc-connect.web.app";
      // 若需用户认证,可添加:&& request.auth != null
    }
  }
}

注意:测试完成后避免使用allow write: if true;,生产环境需严格限制权限范围。

2. 修正CORS配置并重新部署

补充上传所需的响应头,同时明确指定origin(避免通配符潜在冲突),更新后的CORS配置:

[
  {
    "origin": ["https://arptc-connect.web.app"],
    "method": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    "responseHeader": [
      "Content-Type",
      "Authorization",
      "X-Firebase-Storage-Version",
      "X-Goog-Upload-Protocol",
      "X-Goog-Upload-Header-Content-Length",
      "X-Goog-Upload-Command"
    ],
    "maxAgeSeconds": 3600
  }
]

使用gsutil重新部署配置:

gsutil cors set cors.json gs://arptc-connect.appspot.com

配置生效可能需要1-5分钟,请勿立即测试。

3. 排查上传请求细节

  • 确认前端上传代码使用的请求方法为PUT或POST(Firebase Storage标准上传方法);
  • 若安全规则要求认证,确保请求携带有效的Firebase Auth令牌(Authorization头);
  • 检查请求中是否包含X-Goog-Upload-Protocol等必要的上传头。

4. 分析预请求失败原因

打开浏览器开发者工具的网络面板,找到触发的OPTIONS预请求:

  • 若响应状态为403:优先检查安全规则的写权限配置;
  • 若响应状态为400:验证CORS配置的JSON格式是否正确,或请求头是否超出配置允许范围;
  • 若响应状态为500:可能是Firebase服务临时故障,稍后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:05:08