Firebase 存储空间:使用下载网址而不是存储参考



我有一个使用Firebase Storage存储图像的iOS应用程序。上传图像后,我将其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 reference:https://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保存在数据库中,然后将其用于在应用程序中显示图像。这些图像不是个人的,也不包含敏感内容,所以我不介意它们是否公开。我主要想知道;如果我这样做,我有什么需要担心的吗?这是不常见的做法是有原因的吗?

你不需要"做"任何事情。

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

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

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

就像一个魅力。

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

另请注意,强制实施存储应用检查会破坏这一点。

最新更新