firebase - 如何在 Firebase 中存储大量 HTML 文件并通过 http 请求提供服务?
问题描述
我有很多需要存储的 html 报告,然后我希望能够从 API 端点将其提供给我的应用程序GET /:reportID
。
我最初且可能是愚蠢的方法是将所有 HTML 文件存储在云函数上,然后在调用端点时发送 HTML 文件。这不起作用,因为The maximum size of a single function deployment
限制只有 100MB 压缩或 500MB 未压缩。(我有近十万个 HTML 文件)
然后我正在考虑将文件存储在 Firebase 存储中。在调用云函数时提供它,首先下载它然后发送给客户端。我认为这不是一个好方法,因为涉及很多任务。
- 2x 下载
- 将文件写入云函数
- 发送后删除文件
我能想到的另一种方法是将文件直接放入我的客户端应用程序中。但是,我不使用来自 firebase 的身份验证,所以我有一个需要首先进行身份验证的令牌。我不确定这是否可以添加到 Firebase 存储规则中。
我目前被卡住了。任何人都可以给我一些关于我应该如何解决这个问题的见解?
解决方案
Firebase 存储是幕后的 Google Cloud Storage Bucket。text/html
您可以将 HTML 文件直接作为对象(HTML 文件)存储在具有内容类型的 Google Cloud Storage Bucket 中,而不是将您的 HTML 文件作为来自 Cloud Function 的响应提供。然后您需要打开存储桶以供公众访问。安全方面,您可以只允许经过身份验证的用户访问文件。因此,您可以直接从 Cloud Storage 提供文件,并克服 100MB 的限制。
您的文件将可通过此 URL 模式访问https://storage.googleapis.com/<BUCKET_NAME/<HTML_FILE_NAME
。
最后,您可以改进:
- 您可以将 HTML 文件缓存在 CDN 后面
- 您可以将
storage.googleapis.com
域替换为静态 IP 地址。
您可以通过简单的方式完成所有这些步骤,在这个Google 文档中有很好的记录。
推荐阅读
- ruby-on-rails - 你可以在视图中使用逻辑吗?导轨
- docker - 从容器复制时,如何阻止 docker 截断长文件名?
- kivy - 使用条件语句修改其他小部件 KivyMD
- python - 使用张量向量化 Tensorflow
- html - 如何使用 CSS 在视频上创建黑色叠加层?
- firebase - 从搜索栏手动访问路线时,Vue Routes 会注销应用程序
- c++ - 如何在 C++ 中存储时间
- java - 如何正确将 JAR 添加到 Gradle 和 IDEA
- flutter - 如何生成代码供用户在应用程序中注册
- flutter - Flutter——如何用 html 链接渲染一个 Flutter 文本