Xamarin iOS UIImagePickerController图库视频MediaURL路径无效问题
UIImagePickerController选取图库视频路径错误修复方案
错误根因
你报错的路径存在多次重复拼接的file:/协议头,核心问题是你对NSUrl对象取路径的方式错误:System.IO.File类操作的是纯文件系统路径,不能带file://协议头,你直接调用NSUrl.ToString()会返回带协议头的完整URL字符串,反复转换拼接后就形成了无效路径。
修复后的代码
// 直接获取不带协议头的纯文件系统路径 string sourceVideoPath = e.MediaUrl.Path; // 从NSUrl直接提取文件名,避免额外转换出错 string fileName = e.MediaUrl.LastPathComponent; string targetPath = Path.Combine(Path.GetTempPath(), fileName); // 执行拷贝,添加overwrite参数避免同名文件冲突 File.Copy(sourceVideoPath, targetPath, overwrite: true); final_vid = new FileResult(targetPath);
相关说明
- 你对mediaURL有效期的认知是正确的:UIImagePickerController返回的mediaURL是系统临时分配的访问路径,生命周期仅维持在当前回调上下文范围内,退出回调或APP重启后就会失效,拷贝到自身APP沙箱目录(临时目录/文档目录)是标准正确实现。
- 额外注意事项:
- 操作文件前建议先调用
File.Exists(sourceVideoPath)判断源路径是否存在,提前捕获异常 - 如果选取的是iCloud上未同步到本地的视频,该路径会返回无效值,需要先通过PHPhotoLibrary相关API请求将视频资源下载到本地后再执行拷贝操作
内容的提问来源于stack exchange,提问作者Mike K
相关产品推荐
相关产品推荐

