Firebase存储:使用下载Url而不是存储参考

Firebase存储:使用下载Url而不是存储参考,firebase,firebase-realtime-database,google-cloud-storage,firebase-storage,firebaseui,Firebase,Firebase Realtime Database,Google Cloud Storage,Firebase Storage,Firebaseui,我有一个iOS应用程序,它使用Firebase存储来存储图像。上传图像后,我将其存储参考保存在我的Firebase数据库中。当应用程序加载时,它会从数据库中获取各种存储引用,并使用FirebaseUI方法显示相应的图像,如下所示: let storageRef = Storage.storage().reference(forURL: imageUrl) imageView.sd_setImage(with: storageRef, placeholderImage: nil) 这很有效。。。

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

let storageRef = Storage.storage().reference(forURL: imageUrl)
imageView.sd_setImage(with: storageRef, placeholderImage: nil)
这很有效。。。但是它非常慢

在寻找加速Firebase存储的解决方案时,我发现这篇文章提示使用图像的公共链接,即其
下载url
,而不是其
存储参考

我的理解是,这与
公共URL
前面有CDN有关,而
存储引用
则没有

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

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

    if let downloadUrl = downloadUrl {
        // do something with downloadUrl
    }
}
但是,这样做对我来说是毫无用处的,因为在图像显示之前,异步调用会占用额外的时间

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

你不需要“做”任何事情

对于存储中的公共文件(即具有
允许读取;
安全规则的文件),获取这些文件的URL为:

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

工作起来很有魅力


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

哇,这就是我真正想要的答案。我花了好几天的时间寻找一种更有效的方法来获取url,真不敢相信我从未意识到这一点。谢谢此外,您还需要更改Firebase存储规则,如这里所述@Stratubas我对Firebase不太熟悉,但带有令牌的文件也具有“公共”访问权限。我认为,解释存储规则将改进您的答案。