【问题标题】:How to retrieve data from firebase storage如何从 Firebase 存储中检索数据
【发布时间】:2021-05-02 00:55:24
【问题描述】:

嘿,我正在尝试检索保存在 firebase 存储中的用户图像,但我使用此存储路径(firebase 中的个人资料图片文件夹)作为字符串(子路径)来更新用户图像。当用户配置文件更新没有错误时,此代码没有像我预期的那样更新用户图像我在这里缺少什么可以让我成功地使用我的用户图像并解决我的问题?

                            var spaceRef = Storage.storage().reference()
                        let storagePath = "gs://tunnel-vision-bc055.appspot.com/images/space.jpg"
                        spaceRef = Storage.storage().reference(forURL: storagePath)
                       let reference = spaceRef.child("profilePic")

                        // UIImageView in your ViewController
                        let imageView: UIImageView = self.ProfileImage

                        // Placeholder image
                        let placeholderImage = UIImage(named: "image/jpeg")

                        // Load the image using SDWebImage
                        imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)
                            // Uh-oh, an error occurred!
                            return
                          }

【问题讨论】:

  • 检查这是否解决了您的问题:stackoverflow.com/a/59872820/2781088
  • 错误指的是什么调用?
  • 这一行就在这里 let user = User(ProfileImage: ProfileImage) @DanAbnormal
  • User 类是什么样子的?
  • 问题中的代码有很多问题;大图是实际图像应该存储在 Firebase 存储(或其他托管站点)中,并且该图像的路径是存储在 Firebase 实时数据库中的内容。问题中的代码命名有点荒谬,因为ProfileImageProfileImageURL 这里的let ProfileImage = value?["ProfileImageUrl"] as? String ?? "" 非常不同。请查看指南Storage

标签: ios swift firebase firebase-storage


【解决方案1】:

这不会是你所有问题的答案,但希望是其中的一些。

首先,在 Swift 中,变量和常量以小写字母开头。大写的类。例如,您的 ProfileImage 应该是 profileImage。为清楚起见,当我输入 profileImage 时,我指的是您的 ProfileImage。

现在,输入。您发布的代码中有一个常量 profileImage。这是字符串类型。您将键“ProfileImageUrl”的值设置为它。我会将其名称更改为 profileImageURL。

然后(根据您的一个 cmets)您正在调用 self.profileImage

let imageView: UIImageView = self.profileImage

由于您没有看到任何错误,我假设您还有一个名为 profileImage 的类属性,类型为 UIImageView。

线

// let user = User(ProfileImage: ProfileImage)

不会帮助你。据我从您发布的代码中了解 - 以及您想要实现的目标 - 您也可以删除它。或者像我上面那样评论它(//)。

你要做的是设置一个imageView的图像。

为此,您需要这样做

imageView.image = image

要做到这一点,您需要一个 imageView 和一个图像。如果您不知道如何创建 imageView,请在 SO 上搜索答案。

然后,您可以从从 Firebase 获得的 url 创建图像并将其设置为 imageView。有点像

let profileImageURL = value?["ProfileImageUrl"] as? String ?? ""
let url = URL(string: profileImageURL)

DispatchQueue.global().async {
    guard let data = Data(contentsOf: url) else {return} // if url is nil, return block is executed and code below is not
    DispatchQueue.main.async {
        self.imageView.image = UIImage(data: data)
    }
}

【讨论】:

  • 答案超级清晰;但是,如果 OP 使用的是 Firebase Storage,则代码 Data(contentsOf: url) 将不适用,看起来他们是 从 firebase 检索用户图像。另外,我猜想 OP 想用用户图像创建一个用户对象,所以 `let user = User(profileImage: userImage)' 对于这个用例是有意义的。很有帮助!
  • 谢谢@Jay!我想你是正确的。那一刻我无法理解这一切。我会考虑更新这个答案
  • 是的,杰伊是对的 数据内容不起作用它只给了我另一个错误调用可以抛出,但它没有标记为“尝试”并且错误未处理@DanAbnormal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2017-09-16
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2018-06-11
  • 2020-10-23
相关资源
最近更新 更多