cordova-plugin-file:应用程序更新(iOS)后无法访问的文件

问题描述 投票:1回答:1

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

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

[然后,我认为也许我可以解决在将img src加载到base64 blob时将其加载到cordova.file.readAsUrl()中的问题,但是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个回答
0
投票

我找到了原因和解决方法(当您知道问题时非常明显):

原因

[在每次新安装时,iOS都会为应用程序重命名数据目录。目录路径具有以下形式:

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

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

解决方案>>

如果您仍然可以做到(尚未部署,没有实际用户),则仅存储相对路径,并每次使用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转换和清理,就像上面的问题一样。

希望这对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.