我应该将图片上传到 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?的主要内容,如果未能解决你的问题,请参考以下文章