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

如何编写Firebase Storage规则以允许上传Libre Office格式文件

错误原因说明

  • 第一种写法的问题:request.resource.contentType 读取的是文件的MIME类型而非文件扩展名,同时matches()方法接收正则表达式语法,你写的.odt中.会被识别为正则通配符,匹配逻辑完全不符合预期。
  • 第二种写法的问题:LibreOffice格式的标准MIME类型不存在application/odt这类简写,正确的MIME带有OASIS开放文档的规范前缀。

正确实现方案

方案1:基于MIME类型校验(推荐作为核心校验逻辑)

LibreOffice对应格式的标准MIME类型如下:

  • odt(文本文档):application/vnd.oasis.opendocument.text
  • ods(电子表格):application/vnd.oasis.opendocument.spreadsheet
  • odp(演示文稿):application/vnd.oasis.opendocument.presentation

对应的规则可以合并为单条正则匹配,注意正则中的.需要转义:

allow write: if request.resource.contentType.matches('application/vnd\\.oasis\\.opendocument\\.(text|spreadsheet|presentation)');

方案2:补充文件名后缀校验(可选,提升安全性)

为了避免部分客户端上传时MIME类型标注错误的问题,可以额外加一层文件扩展名校验:

allow write: if request.resource.name.matches('\\.(odt|ods|odp)$');

组合使用的完整示例

两种校验同时开启,覆盖更多异常场景:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow write: if 
        // 校验MIME类型
        request.resource.contentType.matches('application/vnd\\.oasis\\.opendocument\\.(text|spreadsheet|presentation)')
        // 同时校验文件后缀
        && request.resource.name.matches('\\.(odt|ods|odp)$');
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:54:04