gpt4 book ai didi

ios - Firebase 数据库规则 - 获取图像访问被拒绝 (iOS)

转载 作者:行者123 更新时间:2023-11-28 06:32:16 25 4
gpt4 key购买 nike

我对 Firebase 很陌生。我在 Youtube 上观看了使用 Firebase 构建应用程序的教程。不幸的是,当我尝试从 Firebase 访问图像的 URL 时出现错误,直到我将 URL 打印到控制台并将其复制粘贴到浏览器的地址栏之前,我无法弄清楚为什么会出现错误。

我从 Firebase 收到代码 403 - 访问被拒绝。我也尝试使用谷歌来解决我的问题,但没有任何改变。我重写了我的数据库规则,但它不起作用。请帮助我。

我的代码

extension UIImageView
{
func skin() {
self.layer.cornerRadius = 20
self.clipsToBounds = true
}


func loadAvatar(link:String){
let queue:DispatchQueue = DispatchQueue(label: "LoadingImage", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, target: nil)
let activity:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)

activity.frame = CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0)

activity.color = UIColor.blue
self.addSubview(activity)
activity.startAnimating()
queue.async {
let url:URL = URL(fileURLWithPath: link)
do{
let data:Data = try Data(contentsOf: url)
DispatchQueue.main.async(execute: {
activity.stopAnimating()
self.image = UIImage(data: data)
})

}catch{// my app always jump into catch because can access image
activity.stopAnimating()
print("Error ")//error
}
}
}
}

调用Loadavatar函数的地方:

extension ScreenListFriendViewController : UITableViewDataSource, UITableViewDelegate {

func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listFriend.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ScreenListFriendTableViewCell

cell.lblName.text = listFriend[indexPath.row].fullname
cell.imgAvatar.loadAvatar(link: listFriend[indexPath.row].linkAvt)
return cell
}

}

我的 Firebase 数据库规则:

{
"rules": {
".read": true,
".write":true
}
}

我的图片 URL 如下所示:

https:/firebasestorage.googleapis.com/v0/b/appchat-e1cc4.appspot.com/o/images%252Fpassion@gmail.com.jpg%3Falt=media&token=275419bf-c0a4-4fc5-932e-624df797f9d3

注:https:/,不知道为什么只有1个/

PS: 我使用 Xcode 8 和 Swift 3

最佳答案

loadAvatar 函数中,您将下载 URL 作为字符串传递给 init(fileURLWithPath: String):

queue.async {
let url:URL = URL(fileURLWithPath: link)
do {

您应该将下载 URL 传递给 init?(string: String)。或者,只需使用我们的库返回的 URL,而不是将其转换为字符串然后再转换回 URL。

你的实际图片链接是

https://firebasestorage.googleapis.com/v0/b/appchat-e1cc4.appspot.com/o/images%2Fpassion@gmail.com.jpg?alt=media&token=275419bf-c0a4-4fc5-932e-624df797f9d3

init(fileURLWithPath: String) 方法将字符串解释为本地文件路径,这不是您想要的。这也解释了为什么 https 后的斜线被折叠,而 %? 字符被 URL 编码。

关于ios - Firebase 数据库规则 - 获取图像访问被拒绝 (iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39998949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com