我应该将图像上传到Cloud Firestore或Firebase Storage吗?

时间:2019-07-01 05:41:07

标签: firebase flutter google-cloud-firestore firebase-storage

可能是个愚蠢的问题,但需要像我一样为初学者清除。

我知道如何在Firestore数据库上上传图像,但我想而不是使用FirebaseStorage为什么我们不使用base64字符串来上传图像,这可能是如此简单?还是字符串长度有一些限制?

  

〜PS:我没有尝试使用base64字符串在Firestore上上传图像。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

Firestore主要针对读写操作收费,每月仅1 GB的免费存储空间!如果操作不当,这可能是一个严重的陷阱。阅读How we spent 30k USD in Firebase in less than 72 hours

到目前为止,Firebase Storage是存储文件的最佳选择,几乎没有文件大小限制,而且价格便宜得多,然后只需将文件url保存到Firestore中就可以了。

答案 2 :(得分:1)

从技术角度来看,是的,您始终可以存储(base64)字符串,以后再使用它来检索图像。但是,base64字符串比字节数据最多高30%。因此,如果使用base64,则会降低性能和存储空间。

第二,使用FirebaseStorage还有另一个优势。当移动应用程序处于后台时,将上传图像。作为开发人员,我们无需为此编写任何特定代码。

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

我的结论:优先选择Base64作为Firebase存储。