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不太熟悉,但带有令牌的文件也具有“公共”访问权限。我认为,解释存储规则将改进您的答案。