我正在尝试确定在诸如Realtime Database或Cloud Firestore之类的直接读取数据库中引用Firebase Storage(Google云存储)文件的最佳方法。由于对该数据库的读取操作无法从可以发出令牌和缓存图像URL的后端中受益,因此我不清楚最有效的方法是存储这些引用。
我提出了一些选择,但没有一个是明确的赢家。
将类似于/images/foo.jpg
的路径存储到数据库,并使用Storage Client SDK生成带有storage.bucket().getDownloadURL("/images/foo.jpg")
的标记化路径。
优点:安全且简单。
缺点:要显示的每个图像的网络通话都会大大影响性能。
存储带有超长TTL的标记化路径,例如https://firebasestorage.googleapis.com/v0/b/storage-bucket-823743.appspot.com/o/images%2Ffoo.jpg?alt=media&token=c6da1e33-f3ff-41e2-a6f0-bdb475a2f6d9
。
优点:客户端上无需额外获取。
缺点:长字符串存储在昂贵的RTDB中。如果该令牌被错误地吊销怎么办?现在数据库已损坏。
将类似于/images/foo.jpg
的路径存储到数据库,并使用公共存储规则。重构为自定义静态网址,例如https://firebasestorage.googleapis.com/v0/b/storage-bucket-823743.appspot.com/o/images%2Ffoo.jpg?alt=media
优点:使用微小的数据库,无需额外的客户端获取,无需公开访问,也不会丢失任何令牌。
缺点:URL编码非常不稳定,存储设备可能会更改其URL格式,因此我们很不走运。
因此,这些是我提出的选项,并且可能还有更多选择。有关如何解决此问题的任何建议?这个问题是唯一的,因为Firebase数据库无法利用自定义服务器来处理令牌/缓存层来解决此问题。
答案 0 :(得分:1)
没有唯一的“最佳方法”来存储这些路径。这完全取决于您的用例,首选项以及实现它的上下文。
我通常使用:
您提到的这些骗局根本不影响我。我建议您采用类似的方法,并在问题实际发生时报告。