В 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.