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

react-native-fs无法读取Android端DCIM/Camera目录文件问题

无法读取Camera目录文件的核心原因
  • 最直接的诱因是路径大小写不匹配:Android基于Linux内核,文件系统严格区分大小写。从你打印的DCIM根目录返回结果可以明确看到,相机文件夹的实际名称是首字母大写的Camera,但你代码里拼接路径时写的是全小写的camera,实际访问的是不存在的路径。部分版本的react-native-fs对不存在路径的readDir操作不会抛出异常,会直接返回空数组,才会出现上层目录能正常读、子目录读不到内容的现象。
  • 潜在的高版本兼容问题:你当前配置的READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE权限仅在Android 12(API级别31)及以下系统生效,Android 13(API级别33)及更高版本已经废弃这两个宽泛的存储权限,未适配新权限的话即使路径写对,也可能因为权限不足读不到目录内的文件。
对应解决步骤
  1. 首先修正路径大小写错误,将路径里的全小写camera改为和实际目录名一致的大写开头Camera,同时给文件操作加异常捕获方便排查问题:
async componentDidMount() {
  // 修正目录名大小写,匹配系统实际路径
  const path = RNFS.ExternalStorageDirectoryPath + '/dcim/Camera';
  console.log('Target Path : ', path);
  try {
    const dir = await RNFS.readDir(path);
    console.log('DIR Result : ', dir);
  } catch (err) {
    console.log('Read directory failed: ', err);
  }
}
  1. 适配高版本Android的权限规则:
    • 修改android/app/src/main/AndroidManifest.xml中的权限声明,给旧权限加上最高版本限制,补充Android 13+需要的细分媒体权限:
<!-- Android 12及以下版本的存储权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<!-- Android 13及以上版本的媒体读取权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
- 在执行目录读取操作前,针对当前系统版本动态申请对应权限,Android 6.0以上的危险权限仅静态声明无法生效,必须拿到用户的动态授权才能正常访问存储内容。
  1. 重新打包运行应用,即可正常获取Camera目录下的媒体文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:57:33