更新代码与Pods后遇StorageMetadata无downloadURL成员错误求解决
修复Firebase Storage中
StorageMetadata无downloadURL成员的错误 问题描述
最近更新了项目代码和Pods后,我实现的Firebase Storage视频上传功能报错了,错误提示是:StorageMetadata' has no member 'downloadURL'。我的旧实现代码如下:
static func uploadVideoToFirebaseStorage(videoUrl: URL, onSuccess: @escaping (_ videoUrl: String) -> Void) { let videoIdString = NSUUID().uuidString let storageRef = Storage.storage().reference(forURL: Config.STORAGE_ROOF_REF).child("posts").child(videoIdString) storageRef.putFile(from: videoUrl, metadata: nil) { (metadata, error) in if error != nil { ProgressHUD.showError(error!.localizedDescription) return } if let videoUrl = metadata?.downloadURL()?.absoluteString { onSuccess(videoUrl) } } }
更新后还出现了新的错误(截图显示调用downloadURL()的位置报红),请问该如何修复?
解决方案
这问题我之前也碰到过!是Firebase Storage的SDK在新版本中做了API调整——StorageMetadata不再提供downloadURL()方法,现在需要直接通过存储引用(StorageReference)来异步获取下载链接。
你只需要修改获取下载链接的逻辑,以下是修复后的完整代码:
static func uploadVideoToFirebaseStorage(videoUrl: URL, onSuccess: @escaping (_ videoUrl: String) -> Void) { let videoIdString = NSUUID().uuidString let storageRef = Storage.storage().reference(forURL: Config.STORAGE_ROOF_REF).child("posts").child(videoIdString) storageRef.putFile(from: videoUrl, metadata: nil) { (metadata, error) in if error != nil { ProgressHUD.showError(error!.localizedDescription) return } // 改为从存储引用获取下载链接,而非metadata storageRef.downloadURL { (url, error) in guard let downloadUrl = url else { // 处理获取链接失败的场景 ProgressHUD.showError(error?.localizedDescription ?? "Failed to retrieve download URL") return } onSuccess(downloadUrl.absoluteString) } } }
关键改动点:
- 移除了原代码中从
metadata调用downloadURL()的逻辑 - 替换为调用
storageRef.downloadURL(completion:)方法,异步获取下载链接 - 增加了对
url为空的安全校验,避免潜在崩溃,同时补充了错误提示
这样修改后就能适配新版本的Firebase Storage SDK了,运行代码应该就能正常获取视频的下载链接啦!
内容的提问来源于stack exchange,提问作者felon
相关产品推荐
相关产品推荐

