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

使用HTTP请求下载Firebase Storage文件遇权限错误,如何开放公开下载?

解决Firebase Storage下载文件权限错误问题

问题排查与修复步骤

1. 修正安全规则的路径占位符

你当前安全规则里的<folder>是占位符,必须替换为实际的目标文件夹名称,否则规则无法匹配到文件路径,导致文件命中下方要求认证的规则。比如你的文件存放在test-public文件夹下,规则应修改为:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /test-public/{allPaths=**} {
      allow read: if true; // 允许任何人通过链接读取该文件夹下所有文件
      allow write: if request.auth != null;
    }
    match /{allPaths=**} {
      allow read, write: if request.auth != null; // 其他路径需身份认证
    }
  }
}

修改完成后,务必在Firebase控制台的Storage规则页面点击「发布」生效。

2. 确认getSignedUrl的调用环境

getSignedUrl是服务端专属API,仅能在持有Firebase服务账号密钥的环境(如Node.js后端、Cloud Functions)中调用。如果你的代码运行在前端浏览器环境,直接调用该方法会因权限缺失报错,此时应改用公开文件的永久下载URL:

  • 直接在Firebase控制台找到目标文件,点击右侧三点菜单选择「获取下载链接」,用该链接发起HTTP请求即可。
  • 或者通过前端Firebase SDK的getDownloadURL方法获取公开文件URL(前提是文件路径匹配了allow read: if true的规则):
import { getStorage, ref, getDownloadURL } from "firebase/storage";

const storage = getStorage();
getDownloadURL(ref(storage, '<filepath>'))
  .then((url) => {
    const xhr = new XMLHttpRequest();
    xhr.responseType = 'blob';
    xhr.onload = (event) => {
      const blob = xhr.response;
      // 按需处理blob,例如保存到本地
    };
    xhr.open('GET', url);
    xhr.send();
  })
  .catch((error) => {
    console.log(error);
  });

3. 后端调用的服务账号权限检查

如果代码运行在后端环境,需确保Firebase服务账号拥有storage.objects.get权限:

  • 登录Google Cloud控制台的IAM页面,找到对应服务账号(格式通常为firebase-adminsdk-xxx@<项目ID>.iam.gserviceaccount.com),为其添加「Storage Object Viewer」或「Storage Admin」角色。

验证测试

完成上述修改后,通过以下步骤验证:

  • 确认目标文件确实存放在设置了公开权限的文件夹下
  • 复制生成的URL到浏览器,检查是否能直接下载文件
  • 核对Firebase控制台的Storage规则是否已成功发布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:12:26