Решите собственный путь Android (content: //), если resolLocalFileSystemURL не работает

В Cordova вы можете легко прочитать файл Android с указанным путем (file://storage/etc/etc.txt) используя плагин Cordova File, например:

var path = "file:///path/to/myfile/";
window.resolveLocalFileSystemURL(path, success, fail);
function fail(e) {
console.error(e);
}
function success(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
var content = this.result;
console.log(content);
};
reader.readAsText(file); // or the way you want to read it
});
}

Однако с android-версией> = 4.4 был представлен MediaStore. Медиа-провайдер содержит метаданные для всех доступных носителей на внутренних и внешних устройствах хранения и возвращает content:// URI.

Тогда, если ваш файловый браузер предоставляет нативное содержимое URI Android, что-то вроде: content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F63131 вместо file:///path/to/myfile/ , вы не сможете получить запись файла предыдущего пути, так как плагин файла cordova ожидает абсолютный путь к файлу.

Это хорошо известная проблема путей с android> = 4.4, поэтому кто-то просто написал плагин для решения этой проблемы, вы можете использовать следующее решение.

Скачать cordova-plugin-filepath используя следующую команду в командной строке:

$ cordova plugin add cordova-plugin-filepath 

Затем используйте следующий код для решения:

  var uripath = 'content://com.google.android.apps.photos.contentprovider/0/1/content......';
window.FilePath.resolveNativePath(uripath, successNative, failNative);
function failNative(e) {
console.error('Houston, we have a big problem :(');
}
function successNative(finalPath) {
var path = 'file://'+ finalPath;
window.resolveLocalFileSystemURL(path, success, fail);
function fail(e) {
console.error(e);
}
function success(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
var content = this.result;
console.log(content);
};
reader.readAsText(file); // Finally !
});
}
} 

Содержание URI будет разрешено этим плагином с помощью window.FilePath.resolveNativePath и будет получен собственный путь к файлу, с этим вы можете использовать затем resolveLocalFileSystemURL читать файл без проблем.

Вы можете прочитать больше об этом плагине Вот.

Вариант 2

Используйте плагин, который генерирует file:// стиль пути вместо URI. ourcodeworld-Cordova-FileBrowser плагин является кордовой реализацией NoNonsense-FilePicker для Android. Этот плагин позволяет вам выбирать папки и файлы, и в то же время создавать папки и создавать файлы (на самом деле не файл создается, но он вернет путь к файлу и имя «выбранного пути»).

Добавьте этот плагин в ваш проект, выполнив следующую команду в командной строке:

cordova plugin add https://github.com/ourcodeworld/cordova-ourcodeworld-filebrowser.git

И запустите один сборщик файлов для проверки плагина:

// Single file selector
window.OurCodeWorld.Filebrowser.filePicker.single({
success: function(data){
if(!data.length){
// No file selected
return;
}
// Array with filepaths
// ["file:///storage/emulated/0/360/security/file.txt", "file:///storage/emulated/0/360/security/another-file.txt"]
},
error: function(err){
console.log(err);
}
});

Обратите внимание, что плагин работает как в вертикальной, так и в горизонтальной ориентации, и путь к файлу будет читаться файлом-плагином Cordova.

Ссылка на основную публикацию
Adblock
detector