StorageMetadata无downloadURL成员,iOS头像上传代码报错求助
解决Firebase Storage
downloadURL() 方法不存在的问题 嘿,这个问题我之前踩过坑!你遇到的错误是因为Firebase Storage的SDK更新后,StorageMetadata类不再提供downloadURL()方法了——这个获取下载链接的逻辑已经被迁移到Storage Reference对象上啦。
问题原因
在旧版本的Firebase SDK中,我们可以通过上传完成后的StorageMetadata直接获取下载链接,但新版SDK把这个方法移除了,需要通过你创建的storageRef来调用downloadURL(completion:)方法异步获取链接。
修改后的完整代码
func uploadProfileImage(_ image: UIImage, completion: @escaping ((_ url: URL?) -> ())) { guard let uid = Auth.auth().currentUser?.uid else { completion(nil) return } let storageRef = Storage.storage().reference().child("user/\(uid)") guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { completion(nil) return } let metaData = StorageMetadata() metaData.contentType = "image/jpg" storageRef.putData(imageData, metadata: metaData) { metaData, error in if error == nil, metaData != nil { // 关键改动:通过storageRef获取下载链接,而不是metaData storageRef.downloadURL { downloadUrl, error in if let url = downloadUrl { completion(url) } else { completion(nil) } } } else { // 上传失败 completion(nil) } } }
关键改动说明
- 移除了原来的
if let url = metaData?.downloadURL()调用 - 替换为调用
storageRef.downloadURL(completion:)方法,这个方法是异步的,需要在它的闭包里处理下载链接的结果 - 保持了原有的completion逻辑,确保回调能正确返回URL或nil
另外,建议你检查一下项目里的Firebase SDK版本,确保是最新稳定版,避免因为版本不一致导致的其他API兼容问题。
内容的提问来源于stack exchange,提问作者Timbology
相关产品推荐
相关产品推荐

