Firebase 存储:使用下载 URL 而不是存储引用

Gra*_*mbo 4 google-cloud-storage firebase firebase-realtime-database firebaseui firebase-storage

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

let storageRef = Storage.storage().reference(forURL: imageUrl)
imageView.sd_setImage(with: storageRef, placeholderImage: nil)
Run Code Online (Sandbox Code Playgroud)

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

在寻找加速解决方案时,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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Str*_*bas 7

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

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

https://firebasestorage.googleapis.com/v0/b/ (项目ID) .appspot.com/o/ (存储路径) ?alt=media

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

奇迹般有效。

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