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

如何从FileManager上传视频到Firebase Storage?URL转Data遇阻

解决Firebase Storage上传本地视频文件的问题

你遇到的核心问题是putData(_:metadata:completion:)方法要求传入Data类型参数,但你传入的是本地文件的URL。这里有两种可行的解决方式:

推荐方案:使用putFile直接上传文件

Firebase Storage提供了putFile(from:metadata:completion:)方法,专门用于上传本地文件URL,无需先将文件转为Data,这种方式更高效(尤其是视频这类大文件,避免加载整个文件到内存)。

修改后的代码如下:

private func persistVideoToStorage(id: String, video: URL) {
    let ref = FirebaseManager.shared.storage.reference(withPath: id)
    // 使用putFile直接上传本地文件URL
    ref.putFile(from: video, metadata: nil) { metadata, err in
        if let err = err {
            print(err)
            return
        }
        ref.downloadURL { url, err in
            if let err = err {
                print(err)
                return
            }
            guard let downloadUrl = url else { return }
            // 这里可以处理获取到的下载URL,比如保存到数据库
            print("视频上传完成,下载URL:\(downloadUrl)")
        }
    }
}

备选方案:将URL转为Data上传

如果一定要用putData,可以通过Data(contentsOf:)从URL读取文件内容,但不推荐用于大文件(会占用大量内存),代码示例如下:

private func persistVideoToStorage(id: String, video: URL) {
    let ref = FirebaseManager.shared.storage.reference(withPath: id)
    // 从URL读取Data,注意处理错误
    do {
        let videoData = try Data(contentsOf: video)
        ref.putData(videoData, metadata: nil) { metadata, err in
            if let err = err {
                print(err)
                return
            }
            ref.downloadURL { url, err in
                if let err = err {
                    print(err)
                    return
                }
                guard let downloadUrl = url else { return }
                print("视频上传完成,下载URL:\(downloadUrl)")
            }
        }
    } catch {
        print("读取视频文件失败:\(error)")
    }
}

注意事项

  • 确保你的App有访问该文件路径的权限,对于FileManager的Documents目录,默认是有权限的,但如果是其他目录需要额外配置权限。
  • 大文件上传优先用putFile,避免内存溢出问题。

内容的提问来源于stack exchange,提问作者AdamLeet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:50:15