Firebase 存储规则、Libre Office 内容类型

Firebase storage rules, Libre Office contentTypes

我正在尝试编写允许使用某些特定扩展进行上传的 firebase 存储规则。我不知道如何为 Libre office 文件编写规则。我试过:

request.resource.contentType.matches('.odt') ||
request.resource.contentType.matches('.ods') ||
request.resource.contentType.matches('.odp') ||

还有:

request.resource.contentType.matches('application/odt') ||
request.resource.contentType.matches('application/ods') ||
request.resource.contentType.matches('application/odp') ||
其中

None 有效。如何编写加载 Libre Office 文件的规则?

根据 this Libre Office repo, the MIME content types,这些文件的扩展名是:

MIME type Extension
application/vnd.oasis.opendocument.text (IANA) .odt
application/vnd.oasis.opendocument.spreadsheet (IANA) .ods
application/vnd.oasis.opendocument.presentation (IANA) .odp

这些是“供应商树”媒体类型,因此它们以 vnd.VENDOR. 开头。一些扩展,比如 application/json 是 IANA 定义的类型,没有这个前缀——你通常不能只在 /.

之后添加一个扩展

您的规则将是:

request.resource.contentType.matches('application/vnd.oasis.opendocument.text') ||
request.resource.contentType.matches('application/vnd.oasis.opendocument.spreadsheet') ||
request.resource.contentType.matches('application/vnd.oasis.opendocument.presentation') ||

如果您查看 LibreOffice 保存的文件的属性,它们看起来像这样:

我查找了这些 MIME 类型并在 OpenOffice 的文档中找到了它们。

然后我尝试了这些安全规则,它们运行良好:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow write: if request.resource.contentType.matches('application/vnd.oasis.opendocument.*');
    }
  }
}

我刚刚在末尾添加了一个通配符 ('application/vnd.oasis.opendocument.*')。我尝试使用 .odt.ods 文件。已上传。