【问题标题】:What Firebase Storage reference should be saved to RTDB/Firestore?应该将哪些 Firebase 存储参考保存到 RTDB/Firestore?
【发布时间】:2019-10-01 23:12:03
【问题描述】:

我正在尝试确定在实时数据库或 Cloud Firestore 等直读数据库中引用 Firebase Storage (Google Cloud Storage) 文件的最佳方式。由于对该数据库的读取操作不会受益于可以发出令牌和缓存图像 URL 的后端,因此我不清楚存储这些引用的最佳性能方式是什么。

我提出了一些选择,但没有一个是明显的赢家。

  1. /images/foo.jpg 之类的路径存储到数据库中,并使用Storage Client SDK 生成带有storage.bucket().getDownloadURL("/images/foo.jpg") 的标记化路径。

    优点:安全且简单。

    缺点:您要显示的每张图片的网络调用都会严重影响性能。

  2. 使用超长 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 中的长字符串。如果该令牌被错误地撤销了怎么办?数据库现已损坏。

  3. /images/foo.jpg 之类的路径存储到数据库并使用公共存储规则。重构为自定义静态 URL,如https://firebasestorage.googleapis.com/v0/b/storage-bucket-823743.appspot.com/o/images%2Ffoo.jpg?alt=media

    优点:使用小型数据库,无需额外的客户端获取,显式公共访问,不会丢失令牌。

    缺点:URL 编码非常不稳定,存储可能会改变它们的 URL 格式,我们会很不走运。

所以,这些是我想出的选项,而且可能还有更多。有关如何解决此问题的任何建议?这个问题是独一无二的,因为 Firebase 数据库没有自定义服务器的优势来处理令牌/缓存层来解决这个问题。

【问题讨论】:

    标签: firebase firebase-storage


    【解决方案1】:

    没有单一的“最佳方式”来存储这些路径。这完全取决于您的用例、偏好以及实施它的环境。

    我通常使用:

    1. 如果我需要访问要保护的文件,我会存储图像路径(如您的 #1 中),然后使用 Firebase SDK 访问文件。
    2. 如果我不需要访问要保护的文件,我会存储图像路径下载 URL。这样我可以根据路径轻松找到图片,并在非安全客户端中使用下载 URL。

    你提到的这些骗局根本不会影响我。我建议您采用类似的方法,并在问题实际发生时报告。

    【讨论】:

    • 嗨,弗兰克,感谢您简洁明了的回复。您指的下载网址是 Firebase Admin SDK 中的 .getSignedUrl 吗?你是否设置了一个超长的 TTL,比如 100 多年以保持它可用?即{ action: "read", expires: "01-01-2119" }
    • 每当我使用getSignedUrl 时,我都会得到一个像这样的怪物网址。这是您指的downloadURL吗? "https://storage.googleapis.com/skatex-8d802.appspot.com/timeline-videos%2Finstagram%3A15239448540%2F8c9f3d8f.mp4?GoogleAccessId=skatex-...
    • ...8d802%40appspot.gserviceaccount.com&Expires=4701974400&Signature=TRIK5XPF0%2BD4QSZUgyDz7to8yyPztkStOay%2FI6%2F2lHubcKauvtBvOYDt92bv3fwqYUqseHsEi2A6MArD0DScJXJrfX2x9AWHRvvbgwkGcvicsA4ny0itesBnfkEFFlSfaHT9dCH6dgsuNFzby3Ln9sN3fN52zZJSCKwSafvjCuMx6Cffre0%2B1vsTKwX%2Bfip170zHCSwqr%2BywR7jMuyCamTRlwEBipWcwn%2Byx4piroZrZVTTME7oioL5Iagwy%2BUG%2BhRsD4hTwIxZOK1mLccho9WJBj0Zd2icU%2FCxPpE2hpL1TpC9XwMWfZfXMuzkwd3QsWQW0CatEBnWmmXmljr451g%3D%3D"
    • 我使用客户端生成的下载 URL,在您自己的 #1 选项中也是如此。您也可以使用服务器端生成的签名 URL,但我自己还没有这样做。
    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 2021-10-01
    • 2016-10-17
    • 1970-01-01
    • 2019-09-05
    • 2021-08-21
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多