【问题标题】:react native fs don't read imported files反应原生 fs 不读取导入的文件
【发布时间】:2022-08-22 23:12:31
【问题描述】:

我正在使用 react native fs 从 sqllite db 导出和导入 json 格式的数据。 我正在将文件 MonthsData.json 写入和读取到 DownloadDirectoryPath。

只要我通过我的应用程序读取和写入数据,一切正常。

如果我使用此命令从我的电脑下载并上传备份文件

adb pull /storage/emulated/0/Download/MonthsData.json .
adb push .\\MonthsData.json /storage/emulated/0/Download/

当我尝试访问文件时

if (await getPermissions()) {
  let result = await RNFS.readFile(
    RNFS.DownloadDirectoryPath + \'/\' + filename,
    \'utf8\',
  );

async function getPermissions(): Promise<boolean> {
  let isPermitedExternalStorage = await PermissionsAndroid.check(
    PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
  );

  if (!isPermitedExternalStorage) {
    // Ask for permission
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
      {
        title: \'Storage permission needed\',
        message: \'Can read ?\',
        buttonNeutral: \'Ask Me Later\',
        buttonNegative: \'Cancel\',
        buttonPositive: \'OK\',
      },
    );
    return granted === PermissionsAndroid.RESULTS.GRANTED;
  }

  return true;
}

我收到以下错误:

Error: ENOENT: /storage/emulated/0/Download/MonthsData.json: open failed: EACCES (Permission denied), open \'/storage/emulated/0/Download/MonthsData.json\'

如果我尝试使用命令列出文件

ls -la /storage/emulated/0/Download/

上传数据前后,所有者和权限始终相同

generic_x86_arm:/ $ ls -la /storage/emulated/0/Download/
total 12
-rw------- 1 u0_a149 u0_a149 6325 2022-02-20 14:34 MonthsData.json

我将不胜感激每一个帮助或建议。

    标签: react-native android-permissions react-native-fs


    【解决方案1】:

    在尝试读取之前,您可能需要使用AndroidPermissions api 请求权限。 android 清单中的权限仅在较旧的 Android 版本上自动授予

    【讨论】:

    • 为了避免使代码复杂化,我避免在此处插入它,但我在 getPermissions 方法中要求提供 Android 权限
    【解决方案2】:

    我找到了这个解决方法。 我通过我的应用程序创建文件。

    推送不同名称的文件

    adb push .\MonthsData.json /storage/emulated/0/Download/MonthsDataTemp.json
    

    然后我连接到我的 android 终端

    adb shell
    
    generic_x86_arm:/ $ cd  /storage/emulated/0/Download/
    generic_x86_arm:/storage/emulated/0/Download $ cat MonthsDataTemp.json > MonthsData.json
    

    【讨论】:

      【解决方案3】:

      常量路径 = ${ExternalStorageDirectoryPath}/Download;

      常量选项 = { fromUrl:网址, toFile:${path}/${fileName},
      };

      下载文件(选项) .promise.then(resp => { ... } 别的 { ... } }) .catch(错误 => { …… });

      【讨论】:

        猜你喜欢
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-02-18
        • 2021-06-06
        • 2023-04-01
        • 2021-10-05
        • 2020-03-27
        相关资源
        最近更新 更多