解决android的本地路径(content://)如果resolveLocalFileSystemURL不工作

在cordova中, 你实际上可以使用cordova文件插件轻松读取具有给定路径的android文件(file://storage/etc/etc.txt), 例如:

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。
然后, 如果你的文件浏览器提供了Android的本地uri内容, 则类似于: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的此插件解析, 并且将检索本机文件路径, 使用此文件, 你可以使用resolveDataFileURL毫无问题地读取文件。
你可以在此处阅读有关此插件的更多信息。
选项2 使用生成file://路径样式而不是URI的插件。 ourcodeworld-cordova-filebrowser插件是适用于Android的NoNonsense-FilePicker的cordova实现。该插件允许你选择文件夹和文件, 同时创建文件夹和创建文件(实际上不是创建文件, 但是它将返回文件路径和” 选择的路径” 的名称)。
在命令提示符处执行以下命令, 将此插件添加到你的项目中:
cordova plugin add https://github.com/ourcodeworld/cordova-ourcodeworld-filebrowser.git

并启动一个文件选择器来测试插件:
// Single file selectorwindow.OurCodeWorld.Filebrowser.filePicker.single({success: function(data){if(!data.length){// No file selectedreturn; }// 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的文件插件可以读取文件路径。
解决android的本地路径(content://)如果resolveLocalFileSystemURL不工作 在官方文档或github存储库中了解有关此插件的更多信息。
【解决android的本地路径(content://)如果resolveLocalFileSystemURL不工作】玩得开心

    推荐阅读