如何在 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 存储中检索文件内容