【问题标题】:cordova-plugin-file: files not accessible after app update (iOS)cordova-plugin-file:应用程序更新后无法访问的文件 (iOS)
【发布时间】:2020-06-30 20:01:53
【问题描述】:

我遇到了一个有趣的问题:我正在开发一个离子应用程序,使用cordova-plugin-file 来存储图像。生成的路径(格式为 file:///... 的 URI)与更多信息一起存储在 SQLite DB 中。当我安装并使用该应用程序时,一切正常。但是,如果我更新(或重新安装)应用程序,图像就找不到了,而新添加的图像却完美无缺。

我首先怀疑图像文件在更新时被删除,但我检查了目录的内容,文件仍然存在。 (仅供参考:我使用file.dataDirectory/scans/ 来放置我的文件)。

然后我想也许我可以解决加载到img src 一个加载了cordova.file.readAsUrl() 的base64 blob 的问题,但是cordova.file 也没有找到该文件(我坚持,文件在那里,我检查了使用 XCode)。

所以我进一步检查了cordova.file,它只找到上次应用安装后添加的文件,但旧文件仍然存在于目录中。

这是我的代码:

private getImgSrcFromDocument(doc: Document): any {
        const uri = doc.fileName;
        const src = this.webView.convertFileSrc(uri);
        const sanitized = this.sanitizer.bypassSecurityTrustUrl(src);

        console.log({uri, src, sanitized});
        return sanitized;
    }
<img class="document_thumbnail" [src]="getImgSrcFromDocument(doc)">

我已经检查过this,但不是我的情况。

顺便说一句,同样的代码在 Android 上也能完美运行。

知道可能是什么问题吗? 提前致谢!

【问题讨论】:

    标签: ios cordova ionic-framework cordova-plugins ionic4


    【解决方案1】:

    我找到了原因和解决方案(当你知道问题时很明显):

    原因

    在每次新安装时,iOS 都会重命名应用的数据目录。目录路径有这种形式:

    file:///var/mobile/Containers/Data/Application/ABC0000-1234-99DD-00FA-E835FEA/Library/NoCloud/

    中间的哈希值在每次安装时都会更新,因此存储在 DB 中的完整路径不再有效。

    解决方案

    如果您仍然可以做到(尚未部署,还没有真正的用户),请仅存储相对路径,并在每次使用 this.file.dataDirectory(或您想要存储文件的任何位置)完成它。

    如果您已经拥有真实用户并希望您的更新“找到文件”,只需忽略存储路径的第一部分并像以前一样构建它:

    const ValidUri = this.file.dataDirectory + // The injected cordova-plugin-file
                     'relativeSubDirectories/' + // If you store your files in some subdirectory
                     this.document.storedFullPath.substr( // Take from fullPath only the filename
                          this.document.storedFullPath.lastIndexOf('/') + 1
                     );
    

    其中 storedFullPath 是字符串file:///var/mobile/...

    之后,您仍然需要进行 webView 转换和清理,就像上面的问题一样。

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2021-06-07
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 2019-02-12
      相关资源
      最近更新 更多