求推荐稳定可用的React Native设备存储文件选择器(已试多款无效)
哥们,我之前在项目里也踩过类似的坑,试了好几个文件选择库都掉链子,给你推荐几个经过实际项目验证、兼容性和稳定性都不错的选项:
expo-document-picker(适配Expo/裸RN项目):这是Expo官方维护的库,靠谱程度拉满。支持从设备存储选择几乎所有类型的文件(文档、音频、视频、压缩包等),API设计非常简洁,核心就是DocumentPicker.getDocumentAsync()方法。你可以指定允许的文件类型,返回结果里包含文件URI、名称、大小等关键信息,后续处理上传或者本地操作都很方便。哪怕是裸RN项目,也能通过Expo Modules轻松集成,适配Android和iOS双平台。react-native-file-selector(专为裸RN项目打造):这个库直接调用系统原生的文件选择器,适配性很强。配置项灵活,能设置文件过滤规则(比如只允许PDF、图片等特定类型),权限处理也很清晰,不会出现莫名其妙的崩溃或者权限拒绝问题。如果你的项目是纯裸RN,没有用Expo,这个是个不错的选择。补充:关于你试过的
react-native-document-chooser:如果你之前用这个库没成功,大概率是权限配置没到位。Android端需要在AndroidManifest.xml里添加对应权限(Android 13及以上是READ_MEDIA_IMAGES/READ_MEDIA_VIDEO等细分权限,低版本是READ_EXTERNAL_STORAGE);iOS端要在Info.plist里添加NSDocumentPickerUsageDescription字段说明使用原因。补全配置后再试试,这个库其实是社区使用率很高的选项,稳定性并不差。
简单示例(以expo-document-picker为例)
import * as DocumentPicker from 'expo-document-picker'; const pickFile = async () => { try { const result = await DocumentPicker.getDocumentAsync({ type: '*/*', // 允许所有类型文件,可指定如'application/pdf'限制类型 copyToCacheDirectory: true, // 可选,将文件复制到缓存目录便于后续操作 }); if (!result.canceled) { const selectedFile = result.assets[0]; console.log('选中文件信息:', selectedFile); // 这里可以编写文件上传、本地读取等逻辑 } } catch (error) { console.error('文件选择失败:', error); } };
内容的提问来源于stack exchange,提问作者ajithes1

