cordova-plugin-file: файлы, недоступные после обновления приложения (iOS) - PullRequest
2 голосов
/ 19 марта 2020

У меня возникла забавная проблема: я разрабатываю приложение ioni c, использующее cordova-plugin-file для хранения изображений. Полученные пути (URI в файле формы: /// ...) хранятся в БД SQLite вместе с дополнительной информацией. Когда я устанавливаю приложение и использую его, все работает отлично. Но если я обновлю (или переустановлю) приложение, старые изображения больше не будут найдены, в то время как вновь добавленные изображения будут работать идеально.

Сначала я подозревал, что изображение файлы были удалены при обновлении, но я проверил содержимое каталога, и файлы все еще там. (К вашему сведению: я использую file.dataDirectory/scans/ для размещения своих файлов).

Тогда я подумал, что, возможно, я мог бы go обойти проблему загрузки в img src BLOB-объект base64, загруженный 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)">

Я уже проверил это , но это не мое case.

Кстати, тот же код прекрасно работает на Android.

Есть идеи, в чем может быть проблема? Заранее спасибо!

1 Ответ

1 голос
/ 20 марта 2020

Я нашел причину и решение (очень очевидно, когда вы знаете проблему):

Причина

При каждой новой установке iOS переименовывает каталог данных для приложения. Путь к каталогу имеет следующий вид:

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

Ха sh в середине обновляется при каждой установке, поэтому сохраненные полные пути в БД больше не действительны.

Решение

Если вы все еще можете это сделать (пока нет развертывания, нет реальных пользователей), сохраните только относительный путь и завершайте его каждый раз с помощью 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
                 );

Где в поле StorageFullPath находится строка file:///var/mobile/....

После этого вам все равно нужно выполнить преобразование и очистку webView, как в вопросе выше.

Надеюсь, это поможет кто-то.

...