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

React Native Expo无法加载本地文件 readAsStringAsync无响应

问题现象

开发本地文件存储类移动端应用时,iOS端Expo Go环境下出现本地文件读取异常:

  • 执行文件存在校验逻辑时,接口返回文件存在:
var info = await FileSystem.getInfoAsync(`${AppConstants.APP_FOLDER}/main.png`);
console.log(info.exists); // 控制台输出true
  • 后续执行文件读取逻辑时程序直接卡住,无任何控制台输出:
var content = await FileSystem.readAsStringAsync(`${AppConstants.TILE_FOLDER}/main.png`);
console.log(content.length); // 无任何输出
  • 测试使用的本地文件路径格式为file:///var/mobile/Containers/Data/Application/.../app_folder/main.png,当前在线URL图片加载展示功能正常,仅本地文件读取触发异常。
解决步骤

按优先级依次排查修复:

  1. 先核对路径常量:你做存在检查用的路径拼接常量是APP_FOLDER,读取文件用的是TILE_FOLDER,先在两行代码前分别打印拼接后的完整路径,确认两个路径完全指向同一个文件。部分旧版本Expo FileSystem在读取不存在/无权限路径时不会抛出异常,会直接挂起Promise,表现就是程序卡住无输出。
  2. 修正文件读取编码参数:readAsStringAsync默认以UTF-8文本编码读取文件,你要读的是PNG格式的二进制图片,直接用默认参数读取时,iOS端会尝试把二进制字节按UTF-8解码,遇到非法编码字节时会出现解码阻塞、进程挂起。如果确实需要读取图片内容,必须指定编码为Base64:
    var content = await FileSystem.readAsStringAsync(
      // 注意这里替换为你实际存储文件的正确路径
      `${AppConstants.APP_FOLDER}/main.png`,
      { encoding: FileSystem.EncodingType.Base64 }
    );
    console.log(content.length);
    
    如果你的需求只是在页面上展示这张本地图片,不需要调用读取接口,直接把本地文件路径传入Image组件的source属性即可渲染。
  3. 检查权限配置:核对项目app.json里的iOS权限配置,确保配置了文件读权限对应的描述字段NSDocumentsFolderUsageDescription,没有配置读权限时,部分版本Expo Go不会抛出权限异常,会直接挂起读取请求。
  4. 排除环境兼容问题:部分旧版本Expo Go内置的FileSystem模块存在iOS端读取二进制文件挂起的已知bug,可以升级Expo SDK到最新稳定版,或打development build测试,排除Expo Go内置环境的问题。
  5. 补全异常捕获:给文件读取逻辑包裹try/catch块,捕获Promise异常,很多时候卡住是因为没有做异常捕获,错误日志被Promise吞掉了:
    try {
      var content = await FileSystem.readAsStringAsync(/* 你的路径和参数 */);
      console.log(content.length);
    } catch (err) {
      console.log('读取文件报错:', err);
    }
    
进一步排查需补充的信息

如果以上步骤操作后问题仍存在,需要补充以下信息定位根因:

  • 当前项目使用的Expo SDK版本、Expo Go客户端版本号
  • AppConstants.APP_FOLDER、AppConstants.TILE_FOLDER两个常量的实际打印值
  • 目标main.png文件的实际文件大小
  • app.json中iOS端的完整权限配置
  • 加了try/catch之后捕获到的具体错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:01:14