Expo SDK 46中expo-image-picker开启allowsMultipleSelection: true时抛出ERR_INVALID_MEDIA_TYPE错误求助
我之前也碰到过类似的问题——用expo-image-picker开启多选时就触发ERR_INVALID_MEDIA_TYPE错误,但单选完全正常。结合你的环境配置(Expo SDK 46、expo-image-picker ~13.3.1、iOS 15.5模拟器),可以从这几个方向尝试解决:
1. 限制媒体类型为图片而非全部
你当前配置的mediaTypes: MediaTypeOptions.All会同时允许选择图片和视频,但在iOS模拟器的多选场景下,这个设置可能触发媒体类型识别的bug。建议先将媒体类型限定为图片:
let result = await launchImageLibraryAsync({ mediaTypes: MediaTypeOptions.Images, // 替换All为Images allowsMultipleSelection: true, })
不少开发者反馈,在SDK 46版本的expo-image-picker中,多选时选择All会导致对部分媒体类型的处理逻辑出错,限定为图片后就能正常工作。
2. 验证真机行为,排除模拟器限制
iOS模拟器的媒体库有时会存在媒体类型标识不准确的问题,建议你在真实iOS设备上测试多选功能。如果真机上可以正常运行,说明问题大概率是模拟器的兼容性导致,你可以尝试升级模拟器的iOS版本(比如iOS 16+),或者优先在真机上开发调试。
3. 升级expo-image-picker到SDK 46兼容的最新版本
虽然你用的~13.3.1是SDK 46的默认版本,但Expo后续可能针对这个bug发布了小版本更新。可以尝试升级到SDK 46允许的最高版本:
运行命令:
expo install expo-image-picker@~13.4.0
(注:13.4.0是SDK 46兼容的image-picker最高版本,你可以通过expo info确认具体兼容版本)
4. 考虑升级Expo SDK到更高版本
SDK 46相对老旧,后续的SDK版本(比如47、48)对expo-image-picker的多选功能做了不少修复。如果项目允许,升级SDK能从根源上解决这类兼容性问题。不过升级前记得备份项目,并检查所有依赖的兼容性。
另外,你已经尝试的expo doctor、安装expo-module-scripts这些操作是正确的,但它们主要解决依赖配置问题,和这个多选的媒体类型错误关联不大。
你可以先尝试第一个方案,修改媒体类型为Images,这是最快速验证的方法。
内容的提问来源于stack exchange,提问作者Nathalia

