重新编译后无法从旧版本的应用程序加载文件

彼得·G。

我的 React Native 应用程序中存在以下问题。该应用程序将一些 PDF 文件存储为文件并能够访问它们。然后可能在重新编译后,应用程序开始在访问这些文件时出现问题。但是,文件仍然存在。我下载了应用程序的完整数据容器进行检查。

应用程序的数据容器

我怀疑是因为应用程序的数据容器 URI 的动态部分在重新编译后总是更改,然后是实际路径?例如D22506C1-9364-43A4-B3C7-F9FFF0E1CC486BDC3F93-6BC3-4BB6-BD3F-9BFA7E4A4627

如果是这样,将 URI 存储在 React Native 中的数据库中以便再次检索它们的最佳做法是什么?

以下6个PDF文件:

ListViewItem.js:30 Debug: Report URI /var/mobile/Containers/Data/Application/D22506C1-9364-43A4-B3C7-F9FFF0E1CC48/Documents/Reports/dk79lqddh3mlkcstqel9.pdf
ListViewItem.js:30 Debug: Report URI /var/mobile/Containers/Data/Application/D22506C1-9364-43A4-B3C7-F9FFF0E1CC48/Documents/Reports/e1exw1qg4cs6czktrfkfvi.pdf
ListViewItem.js:30 Debug: Report URI /var/mobile/Containers/Data/Application/D22506C1-9364-43A4-B3C7-F9FFF0E1CC48/Documents/Reports/zfy6hp3zf42me5ru32jfa.pdf
ListViewItem.js:30 Debug: Report URI /var/mobile/Containers/Data/Application/D22506C1-9364-43A4-B3C7-F9FFF0E1CC48/Documents/Reports/fum4qf23mwnzcmye39xau.pdf
ListViewItem.js:30 Debug: Report URI /var/mobile/Containers/Data/Application/D22506C1-9364-43A4-B3C7-F9FFF0E1CC48/Documents/Reports/btksznt1lxv7k4ey23bw93.pdf
ListViewItem.js:30 Debug: Report URI /var/mobile/Containers/Data/Application/6BDC3F93-6BC3-4BB6-BD3F-9BFA7E4A4627/Documents/Reports/smpkiggii4v7xmfhpnmdi.pdf

URI 无法在应用程序的不同位置加载:

示例 1

<Pdf style={styles.image} source={{ uri: 'file://' + this.props.pdf }} />

示例 2

FileService.readFileFromStorage('file://' + this.report.report_uri, 'base64')    

static readFileFromStorage(path, encoding) {
    return new Promise((resolve, reject) => {
        RNFS.readFile(path, encoding)
            .then((file) => {
                resolve(file);
            })
            .catch((err) => {
                console.log('Error: unable to read file', path, err.message);
                reject(err)
            });
    })

}

这用于写入文件:

FileService.writeFiletoStorage(r.taskId, 'pdf', base64Str)

static writeFiletoStorage(fileName, extention, base64Str) {
    return new Promise((resolve, reject) => {
        RNFS.mkdir(RNFS.DocumentDirectoryPath + '/Reports')
        var path = RNFS.DocumentDirectoryPath + '/Reports/' + fileName + '.' + extention;

        return RNFS.writeFile(path, base64Str, 'base64')
            .then((success) => {
                console.log('FILE WRITTEN!', path, success);
                resolve(path);
            })
            .catch((err) => {
                console.log('Error: unable to write file to storage', path, err.message);
                reject(err)
            });
    })

}
彼得·G。

写入文件的方法是返回完整路径,这在不同的编译中有所不同。仅返回相对路径效果更好:

static writeFiletoStorage(fileName, extension, base64Str) {
        return new Promise((resolve, reject) => {
            RNFS.mkdir(RNFS.DocumentDirectoryPath + 'Reports')
            let path = '/Reports/' + fileName + '.' + extension;
            let fullPath = RNFS.DocumentDirectoryPath + path;

            return RNFS.writeFile(fullPath, base64Str, 'base64')
                .then((success) => {
                    console.log('FILE WRITTEN!', fullPath, success);
                    resolve(path);
                })
                .catch((err) => {
                    console.log('Error: unable to write file to storage', fullPath, err.message);
                    reject(err)
                });
        })

    }

必须对读取文件的方法进行相同的更改:

static readFileFromStorage(path, encoding) {
    return new Promise((resolve, reject) => {
        let fullPath = RNFS.DocumentDirectoryPath + path;
        RNFS.readFile(fullPath, encoding)
            .then((file) => {
                resolve(file);
            })
            .catch((err) => {
                console.log('Error: unable to read file', fullPath, err.message);
                reject(err)
            });
    })

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用新的应用程序图标安装新版本的应用程序后,应用程序显示旧版本的应用程序图标

来自分类Dev

从Visual Sourcesafe重新编译项目的旧版本

来自分类Dev

控制器@Mixin仅在重新编译运行的应用程序后才能工作

来自分类Dev

控制器@Mixin仅在重新编译运行的应用程序后才能工作

来自分类Dev

使旧版本的应用程序免费并上传新的付费版本-iTunes

来自分类Dev

应用程序尝试加载旧版本

来自分类Dev

无法在.NET 4 MVC 4应用程序中加载文件或程序集系统版本= 2.0.5.0

来自分类Dev

对旧版本的iPhone禁用iPhone应用程序

来自分类Dev

在旧版本的android上启动后,cordova / ionic应用程序崩溃

来自分类Dev

Android模拟器具有旧版本的应用程序

来自分类Dev

Visual Studio 2015始终发布我的应用程序的旧版本

来自分类Dev

重新编译后php无法加载xcache.so

来自分类Dev

应用程序的旧版本如何应对较新的核心数据模型?

来自分类Dev

更新iPhone应用程序删除了旧版本数据

来自分类Dev

通过Heroku部署Rails应用程序使用旧版本的Node

来自分类Dev

如何对旧版本的库运行.NET Core应用程序

来自分类Dev

监视无法重新编译的应用程序的筛选图

来自分类Dev

iTunes Connect旧版本的应用程序

来自分类Dev

使旧版本的应用程序免费并上传新的付费版本-iTunes

来自分类Dev

更改grails时,如何使grails运行应用程序重新编译文件?

来自分类Dev

无法在.NET 4 MVC 4应用程序中加载文件或程序集版本为2.0.5.0的系统

来自分类Dev

禁用旧版本iPhone的iPhone应用程序

来自分类Dev

从DEB重新安装后,旧版本的应用程序是否可以保留在硬盘上?

来自分类Dev

通过处置旧版本重新启动应用程序

来自分类Dev

无法安装使用apktool重新编译的应用程序?

来自分类Dev

Intelij:在运行应用程序时重新编译?

来自分类Dev

AVPlayer 无法加载通过 xcode 重新运行应用程序后保存的 .mov 文件

来自分类Dev

更新我的应用程序的旧版本

来自分类Dev

Rider 上的 Winforms 应用程序给出错误:“无法加载文件或程序集 'EnvDTE,版本 = 8.0.0.0,文化 = 中性...'

Related 相关文章

  1. 1

    使用新的应用程序图标安装新版本的应用程序后,应用程序显示旧版本的应用程序图标

  2. 2

    从Visual Sourcesafe重新编译项目的旧版本

  3. 3

    控制器@Mixin仅在重新编译运行的应用程序后才能工作

  4. 4

    控制器@Mixin仅在重新编译运行的应用程序后才能工作

  5. 5

    使旧版本的应用程序免费并上传新的付费版本-iTunes

  6. 6

    应用程序尝试加载旧版本

  7. 7

    无法在.NET 4 MVC 4应用程序中加载文件或程序集系统版本= 2.0.5.0

  8. 8

    对旧版本的iPhone禁用iPhone应用程序

  9. 9

    在旧版本的android上启动后,cordova / ionic应用程序崩溃

  10. 10

    Android模拟器具有旧版本的应用程序

  11. 11

    Visual Studio 2015始终发布我的应用程序的旧版本

  12. 12

    重新编译后php无法加载xcache.so

  13. 13

    应用程序的旧版本如何应对较新的核心数据模型?

  14. 14

    更新iPhone应用程序删除了旧版本数据

  15. 15

    通过Heroku部署Rails应用程序使用旧版本的Node

  16. 16

    如何对旧版本的库运行.NET Core应用程序

  17. 17

    监视无法重新编译的应用程序的筛选图

  18. 18

    iTunes Connect旧版本的应用程序

  19. 19

    使旧版本的应用程序免费并上传新的付费版本-iTunes

  20. 20

    更改grails时,如何使grails运行应用程序重新编译文件?

  21. 21

    无法在.NET 4 MVC 4应用程序中加载文件或程序集版本为2.0.5.0的系统

  22. 22

    禁用旧版本iPhone的iPhone应用程序

  23. 23

    从DEB重新安装后,旧版本的应用程序是否可以保留在硬盘上?

  24. 24

    通过处置旧版本重新启动应用程序

  25. 25

    无法安装使用apktool重新编译的应用程序?

  26. 26

    Intelij:在运行应用程序时重新编译?

  27. 27

    AVPlayer 无法加载通过 xcode 重新运行应用程序后保存的 .mov 文件

  28. 28

    更新我的应用程序的旧版本

  29. 29

    Rider 上的 Winforms 应用程序给出错误:“无法加载文件或程序集 'EnvDTE,版本 = 8.0.0.0,文化 = 中性...'

热门标签

归档