如何在 Firebase 中存储大量 HTML 文件并通过 http 请求提供服务?

Posted

技术标签:

【中文标题】如何在 Firebase 中存储大量 HTML 文件并通过 http 请求提供服务?【英文标题】:How to store lots of HTML files in Firebase and serve it through http request? 【发布时间】:2021-10-16 11:05:20 【问题描述】:

我有很多需要存储的 html 报告,然后我希望能够从 API 端点 GET /:reportID 将其提供给我的应用程序。

我最初且可能是愚蠢的方法是将所有 HTML 文件存储在云函数上,然后在调用端点时发送 HTML 文件。这不起作用,因为The maximum size of a single function deployment 限制只有 100MB 压缩或 500MB 未压缩。(我有近十万个 HTML 文件)

然后我正在考虑将文件存储在 Firebase 存储中。在调用云函数时提供它,首先下载它然后发送给客户端。我认为这不是一个好方法,因为涉及的任务很多。

2x 下载 将文件写入云函数 文件发送后删除

我能想到的另一种方法是将文件直接放入我的客户端应用程序中。但是,我不使用来自 firebase 的身份验证,所以我有一个需要首先进行身份验证的令牌。我不确定这是否可以添加到 Firebase 存储规则中。

我目前卡住了。任何人都可以给我一些关于我应该如何解决这个问题的见解?

【问题讨论】:

【参考方案1】:

Firebase 存储是幕后的 Google Cloud Storage Bucket。您可以将 HTML 文件直接作为对象(HTML 文件)存储在具有 text/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 doc 中有很好的记录。

【讨论】:

【参考方案2】:

您是否考虑将它们作为文本存储在 Firestore 中?

Firestore 具有低延迟和低读取成本,并且可以很好地扩展多个文件和文档。您还可以附加要查询的字段以提供服务。 有了这个,它可能需要一个包装器来解码并注入您的网站,这可以通过云函数或使用基本 javascript 的本地脚本来完成。

但这是对您的需求的推测,您可以将其与 Cloud Functions 和 Cloud Storage 结合使用

【讨论】:

我检查了 Firestore 的限制。他们对每个文档也有 1MiB 的限制,如果我有更大的报告,这在不久的将来可能会成为问题。 可以先查看上传的大小,然后根据需要将文件分区,再分成多个文件 只是还想添加 - 您还可以使用修改技术,删除空格等来减少总字节大小

以上是关于如何在 Firebase 中存储大量 HTML 文件并通过 http 请求提供服务?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter firebase 存储插件需要大量时间来上传文件

Angularfire2:如何从 Firebase 存储中检索文件内容

使用 Angular 7 从 Firebase 存储中检索图像

安全规则中的 Firebase 速率限制?

安全规则中的 Firebase 速率限制?

将多个图像存储到 Firebase 并获取 url