Usando el típico lector de archivos (file plugin) de cordova, podrás leer un archivo con su dirección completa, por ejemplo el archivo con el siguiente directorio "file://storage/etc/etc.txt
" podria ser leído usando el siguiente código:
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
});
}
Sin embargo, con las versiones de Android 4.4 o superiores, se introdujo MediaStore. Este manager contiene meta información para todo el contenido tanto externo como interno del dispositivo y retorna una URL con el formato: content://
.
Luego, si tu explorador de archivos (sea como lo tengas, autoimplementado o un plugin), el directorio de un archivo podría ser similar a content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F63131
en vez de file:///path/to/myfile/
. Por lo tanto, usando el método resolveLocalFileSystemURL no podrás acceder al archivo.
Este es un problema muy conocido en Android V4.4 o superior, por lo tanto alguien ha escrito un plugin para resolver el problema, simplemente sigue los siguientes pasos.
Instala cordova-plugin-filepath en tu proyecto ejecutando el siguiente comando en la línea de comandos:
$ cordova plugin add cordova-plugin-filepath
Ahora, debes usar window.FilePath.resolveNativePath
. para convertir la URL con formato content://
en file://
para despues usar window.resolveLocalFileSystemURL
si quieres leer un archivo.
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 !
});
}
}
La URI de formato content://
será procesada y retornara el directorio original, de esta manera podrás leer el archivo usando resolveLocalFileSystemURL
con un directorio file://
. Puedes leer más acerca de este plugin en su repositorio oficial aquí.
Que te diviertas !
Conviertete en un programador más sociable