【问题标题】:Firebase Storage: Using Download Url Instead of Storage RefFirebase 存储:使用下载网址而不是存储参考
【发布时间】:2019-10-18 02:28:29
【问题描述】:

我有一个iOS 应用程序,它使用Firebase Storage 来存储图像。上传图片后,我将其storage reference 保存在我的Firebase Database 中。当应用程序加载时,它会从数据库中获取各种storage references 并使用FirebaseUI 方法来显示它们对应的图像,如下所示:

let storageRef = Storage.storage().reference(forURL: imageUrl)
imageView.sd_setImage(with: storageRef, placeholderImage: nil)

这很好用……但速度很慢。

在寻找加速Firebase Storage 的解决方案时,我发现这篇文章暗示使用图像的公共链接,即。它的download url,而不是它的storage referencehttps://stackoverflow.com/a/44362350/5225013

我的理解是,这与 public urls 前面有 CDN 有关,而 storage references 没有。

download url 可以在应用程序中使用以下代码检索:

let storageRef = Storage.storage().reference(forURL: imageUrl)
storageRef.downloadURL { (downloadUrl, error) in

    if let downloadUrl = downloadUrl {
        // do something with downloadUrl
    }
}

不过,以这种方式获取它对我的目的来说毫无用处,因为在显示图像之前进行异步调用需要额外的时间......

我一直在考虑编写一个云函数来将每个图像的download url 与其对应的storage reference 一起保存在数据库中,然后使用它在应用程序中显示图像。这些图片不是个人的,也不包含敏感内容,所以我不介意它们是否是公开的。我主要想知道;如果我这样做,有什么我应该担心的吗?这种做法不常见是有原因的吗?

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-storage firebase-storage firebaseui


    【解决方案1】:

    你不需要“做”任何事情。

    对于存储中的公共文件(即具有allow read; 安全规则的文件),获取它们的 URL 是:

    https://firebasestorage.googleapis.com/v0/b/(project id).appspot.com/o/(storage path)?alt=media

    我在我的应用程序中所做的是存储存储路径,然后使用简单的串联构造公共下载 URL。

    像魅力一样工作。

    请注意,存储路径中的某些字符(如空格和斜杠)必须进行转义。在 JavaScript 中,您可以使用 encodeURIComponent()

    另请注意,对存储强制执行 App Check 会破坏这一点。

    【讨论】:

    • 哇,这正是我一直在寻找的答案。我已经搜索了几天以更有效地获取该网址,不敢相信我从未意识到这一点。谢谢!
    • 您还需要更改 Firebase 存储规则,如此处所述stackoverflow.com/a/46154913/1334825
    • @Stratubas 我对 firebase 不够熟悉,但带有令牌的文件也具有“公共”访问权限。我认为,对存储规则的解释将改善您的答案。
    猜你喜欢
    • 2019-05-24
    • 2020-07-26
    • 2019-04-20
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2020-12-09
    • 2016-10-17
    相关资源
    最近更新 更多