使用Swift实现相册选取视频上传Firebase失败问题问询
视频拉取&上传故障排查方案
1. 相册权限与选取配置排查
- 首先确认Info.plist已添加
NSPhotoLibraryUsageDescription权限描述,iOS14+如果开启了有限相册访问权限,要确认用户选中的视频确实在授权范围内 - 检查相册选取组件的配置:
如果使用UIImagePickerController,必须设置mediaTypes包含视频类型,默认仅支持图片选取,不会返回视频地址:
如果使用iOS14+的import MobileCoreServices // 初始化选取器后加这行配置 imagePicker.mediaTypes = [kUTTypeMovie as String]PHPicker,不能通过info[.mediaURL]获取视频地址,需要通过NSItemProvider异步加载资源,否则会一直拿不到videoUrl。 - 打印选取回调返回的完整
info字典,确认是否存在.mediaURL键值,90%的拉取不到问题都是该字段为空导致后续代码未执行。
2. 代码逻辑问题修复
你现有代码存在以下隐患会导致功能异常:
- 错误处理太模糊,无法定位问题根因:所有失败分支把具体error打印出来,不要只打印自定义文案:
// 上传失败分支 print("上传失败原因:\(error!.localizedDescription)") // 拿下载链接失败分支 print("获取下载链接失败:\(error!.localizedDescription)") // 选取页上传失败分支 case .failure(let error): print("上传业务失败:\(error.localizedDescription)") - 播放逻辑缺失自动播放调用,弹框后会默认停在加载状态,容易误以为视频无效:
let vc = AVPlayerViewController() vc.player = AVPlayer(url: url) vc.player?.play() // 补充这行实现自动播放 self.present(vc, animated: true) - 动态生成文件名时注意不要包含特殊字符,你现有代码里的
mymessageıd用了特殊的土耳其语小写ı,后续替换为动态id时要过滤非法字符,避免Firebase存储路径异常。
3. Firebase配置排查
- 测试阶段先放开Firebase Storage的读写权限,确认不是规则拦截导致上传失败:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } } - 确认Firebase SDK初始化正常,其他存储上传功能(如图片上传)可正常运行,排除SDK配置错误问题。
- 确认测试设备网络正常,没有防火墙限制Firebase服务访问。
内容的提问来源于stack exchange,提问作者togar man
相关产品推荐
相关产品推荐

