如何限制单个用户可上传到Firebase Storage的文件总大小?
实现Firebase Storage单用户150GB上传限额的方案
要实现这个限制,需要配合Firebase安全规则和用户容量统计存储两个部分完成,仅靠安全规则无法单独实现累计容量校验。
步骤1:配置用户容量统计存储
首先在Firestore中为每个用户创建专属统计文档,新增usedStorage字段记录用户已上传的所有文件总大小,单位统一为字节:
150GB换算为字节数值为
161061273600,后续校验统一用该数值作为上限。
步骤2:编写Storage安全规则
在Firebase Storage控制台的规则编辑页,添加如下校验规则,限制单用户上传总量:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { // 假设用户上传的文件都存储在 /users/{userId} 目录下 match /users/{userId}/{allPaths=**} { allow write: if request.auth != null && request.auth.uid == userId // 已用容量+本次上传文件大小 ≤ 150GB上限 && (request.resource.size + firestore.get(/databases/(default)/documents/users/$(userId)).data.usedStorage) <= 161061273600; allow read: if request.auth != null && request.auth.uid == userId; } } }
步骤3:自动同步用户已用容量
安全规则本身无法自动更新累计容量,你需要通过Cloud Storage触发器自动同步数值,避免前端篡改:
- 监听
onFinalize事件:用户上传文件成功后,将该文件的size加到相应用户的usedStorage字段中 - 监听
onDelete事件:用户删除文件后,将被删除文件的size从相应用户的usedStorage字段中扣除
注意事项
- 上传前可以在前端提前做容量校验,给用户提前预警,避免上传大文件时被规则拦截
- 不要让前端直接修改
usedStorage字段,必须通过服务端/Cloud Trigger更新,防止用户恶意篡改统计数值
内容的提问来源于stack exchange,提问作者Ojas_Gupta
相关产品推荐
相关产品推荐

