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

Flutter image_picker在iOS13真机选取相册视频时出现OSError权限异常

解决iOS 13真机上image_picker选取相册视频后无法操作文件的问题

我之前做Flutter项目时也踩过这个一模一样的坑!问题根源在于iOS 13开始的文件权限严格限制:当你从相册选取视频时,image_picker返回的videoFile对应的路径是系统分配的临时沙盒访问路径,这个路径仅允许读取媒体内容,不支持直接执行复制、获取文件大小这类操作。而video_player能正常播放,是因为它调用了iOS原生媒体框架,拥有专门的媒体资源读取权限。

解决方案:通过字节流中转复制文件

你需要先把原视频的内容以字节流形式读取出来,再写入到应用自己的文档目录中,之后就能正常操作这个新生成的文件了。修改后的代码示例如下:

var videoFile = await ImagePicker.pickVideo(source: ImageSource.gallery);
if (videoFile == null) return; // 处理用户取消选择的情况

Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
File newFile = File("${appDocPath}/video.MOV");

// 读取原文件字节流并写入新文件
await newFile.writeAsBytes(await videoFile.readAsBytes());

// 现在可以正常操作新文件了
print("新文件路径........${newFile.path}");
print("...................Size: ${await newFile.length()}");

额外补充说明

  • 为什么拍摄的视频和选取的图片没问题?因为拍摄的视频直接存储在应用沙盒内,而选取的图片在iOS 13上image_picker内部做了权限兼容处理,返回的是可直接操作的路径,但视频的处理逻辑不同。
  • 虽然你已经配置了NSPhotoLibraryUsageDescription,如果后续需要将文件保存回相册,记得在Info.plist中补充NSPhotoLibraryAddUsageDescription权限描述,避免出现新的权限报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:24