You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新代码与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:02:12