我应该将图片上传到 Cloud Firestore 还是 Firebase Storage?

Posted

技术标签:

【中文标题】我应该将图片上传到 Cloud Firestore 还是 Firebase Storage?【英文标题】:Should I upload images to Cloud Firestore or Firebase Storage? 【发布时间】:2019-11-11 19:17:46 【问题描述】:

可能是个愚蠢的问题,但需要像我这样的初学者弄清楚。

我知道如何在 Firestore 数据库上上传图片,但我想,为什么我们不使用 base64 字符串来上传图片,而不是使用 FirebaseStorage,这可能很容易?还是对字符串长度有限制?

~ PS:我还没有尝试使用 base64 字符串将图像上传到 Firestore。

【问题讨论】:

【参考方案1】:

Cloud Firestore "Usage and limits" documentation 声明“文档的最大大小”为1 MiB (1,048,576 bytes)。 这是图像的少量数据,仅允许将低分辨率图像存储在单个文档中。作为一种解决方法,您可以将图像存储在多个文档中,但这会变得不必要地复杂,而 Firebase 存储 完美地解决了这个问题。

此外,在收听文档中的任何更改时,您将下载整个图像(整个文档)。如果您有一个包含image (base64 string)likes (int count) 字段的文档,并且您尝试侦听likes 的实时更新,那么您将在每次客户端下载完整图像。

Firebase Storage 因此很可能是您要搜索的内容,因为您可以存储任何大小(与您的容量一样大)的对象,它为您提供下载 URL,而您没有处理任何编码或解码(尽管Cloud Firestore allows blob's,也就是字节数据)。

【讨论】:

【参考方案2】:

在 Firestore 上存储文件(作为二进制数据)而不是 Firebase 存储没有任何好处。

Firestore 主要针对读写和删除进行计费,每月免费存储仅为 1 GB !!!如果做得不好,这可能是一个严重的陷阱。阅读How we spent 30k USD in Firebase in less than 72 hours。

Firebase 存储是迄今为止存储文件的最佳选择,几乎没有文件大小限制且价格便宜得多,然后只需将文件 url 保存到 Firestore 即可。

【讨论】:

您还忽略了一个重点:存储在 Firebase 存储中的文件可以使用 URL 访问 - 不需要序列化/反序列化代码。【参考方案3】:

从技术角度来看,是的,您始终可以存储 (base64) 字符串并在以后使用它来检索图像。但是,base64 字符串比字节数据高出 30%。因此,如果您使用 base64,您将失去性能和存储空间。

其次,使用 FirebaseStorage 有另一个优势。就是在手机app在后台的时候上传图片。作为开发人员,我们不必为此编写任何特定代码。

@creativecreatorormaybenot 已经指出了 Cloud Firestore 和 Firebase 存储的限制。

我的结论:比起 base64,我更喜欢 Firebase 存储。

【讨论】:

以上是关于我应该将图片上传到 Cloud Firestore 还是 Firebase Storage?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Cloud Functions 将文件上传到 Cloud Storage 并使用 Firestore 控制对 Cloud Storage 的访问?

如何定期将大型 JSON 数据集导入 Cloud Firestore?

如何为 Instagram 克隆构建 Cloud Firestore 数据?

从Google Cloud Firestore上载和下载文件

Nodejs,Cloud Firestore上传任务 - 身份验证错误:错误:套接字挂起

使用flutter将多张图片上传到firestore并获取它的下载URL并将所有URL保存到firebase