我有一个iOS
使用的应用程序Firebase Storage
用于存储图像。上传图像后,我保存它storage reference
in my Firebase Database
。当应用程序加载时,它会获取各种storage references
从数据库中并使用FirebaseUI
方法来显示相应的图像,如下所示:
let storageRef = Storage.storage().reference(forURL: imageUrl)
imageView.sd_setImage(with: storageRef, placeholderImage: nil)
这很好用...但是速度很慢。
在寻找加速解决方案的同时Firebase Storage
我发现这篇文章暗示使用图像的公共链接,即。它是download url
,而不是它的storage reference
: https://stackoverflow.com/a/44362350/5225013 https://stackoverflow.com/a/44362350/5225013
我的理解是,这与public urls
他们面前有一个 CDN,而storage references
don't.
The 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
在数据库中,然后使用它在应用程序中显示图像。这些图像不是私人的,也不包含敏感内容,所以我不介意它们是否公开。我主要想知道;如果我这样做,我应该担心什么吗?这是不常见的做法是有原因的吗?
您不需要“做”任何事情。
对于存储中的公共文件(即带有allow read;
安全规则),获取它们的 URL 是:
https://firebasestorage.googleapis.com/v0/b/(项目编号).appspot.com/o/(存储路径)?alt=媒体 https://firebasestorage.googleapis.com/v0/b/YOUR_PROJECT_ID.appspot.com/o/YOUR_FILE_STORAGE_PATH?alt=media
我在应用程序中所做的就是存储存储路径,然后使用简单的串联构建公共下载 URL。
奇迹般有效。
请注意,存储路径中的某些字符(例如空格和斜杠)必须进行转义。在 JavaScript 中你可以这样做encodeURIComponent()
.
另请注意,执行应用程序检查 https://firebase.google.com/docs/app-check对于存储打破了这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)