【发布时间】:2018-12-26 16:23:56
【问题描述】:
当使用图像选择器抓取所选图像并将其放置在 Firebase 存储中时,我希望能够下载 URL 并在应用程序中替换个人资料图像。不幸的是,当进程到达脚本中的 URLSession 时,什么也没有发生。没有错误显示,也没有dispatchQueue。该应用程序不会崩溃,而只是跳过所有内容。对代码修复有什么想法或建议?
if let profileImageUploadedData = self.profileImage.image, let uploadData = profileImage.image?.jpegData(compressionQuality: 0.1)
{
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil
{
print("Downdloading putData Error: \(error!.localizedDescription)")
return
}
storageRef.downloadURL(completion: { (url, error) in
if error != nil
{
print("DownloadURL ERROR \(error!.localizedDescription)")
return
}
if let profileImageUrl = url?.absoluteString
{
print("Profile image uploading...")
let values = ["profileImageUrl": profileImageUrl]
let url = URL(fileURLWithPath: profileImageUrl)
URLSession.shared.dataTask(with: url) { (data, response, error) in // ERROR OCCURING NEED TO FIX
if error != nil
{
print("* URL SESSIONS ERROR: \(error!)")
return
}
DispatchQueue.main.async
{
print("Trying to register profile")
self.registerUserIntoDatabaseWithUID(uid: uid, values: values as [String : AnyObject])
self.profileImage.image = UIImage(data: data!)
print("Dispatch: \(data!)")
}
print("Profile image successfull uploaded to storage")
}
}
})
}).resume()
print("** Profile Image Data Uploaded:\(profileImageUploadedData)")
}
}
func registerUserIntoDatabaseWithUID(uid: String, values: [String: AnyObject])
{
print("Registering to database")
let dataReference = Database.database().reference(fromURL: "URL String")
let usersReference = dataReference.child("users").child(uid)
usersReference.updateChildValues(values, withCompletionBlock: { (err, reference) in
if err != nil
{
print(err!)
return
}
// self.profileImage.image = values["profileImageUrl"] as? UIImage
// self.fetchProfileImage()
self.dismiss(animated: true, completion: nil)
print("Saved user sussccessfully in database")
})
}
}
【问题讨论】:
-
您在这里尝试做什么有点不清楚。如果您想根据 URL 从存储中下载图像,那并不是真正的方法。您通常会根据 url 制作一个 ref,然后使用 .getData 下载实际文件。或者您是否尝试上传选定的图像,然后获取其存储位置的 URL 并将其保存在您的应用程序中?还是……别的什么?
-
您好 Jay,我正在尝试上传选定的图像,然后从其存储位置获取 url,并在每次用户注销并重新登录应用程序时显示该图像@Jay
-
@Jay 我也在脚本中添加了另一部分,我目前必须更好地理解。非常感谢您的宝贵时间!
-
不幸的是,问题中的代码都没有真正做到这一点 - 还要注意您已经将 3 个不同的问题合二为一。 !)如何将图像上传到存储并将其 url 存储在 Firebase 数据库中 2)如何从存储中下载图像 3)如何在登录时从 Firebase 数据库获取 url 以执行 #2 中的下载。概括地说,该过程是:验证用户->获取 UID->从 Firebase 数据库获取下载 URL->下载图像。你能把问题缩小一点,我们来看看!
-
@Jay 我完全理解。因此,在脚本中,它确实完成了将图像上传到 firebase 存储的任务。主要问题是如何获取downloadURL并将图像下载到profileImage。
标签: swift firebase imagedownload