在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的文件插件可以读取文件路径。
在官方文档或github存储库中了解有关此插件的更多信息。
【解决android的本地路径(content://)如果resolveLocalFileSystemURL不工作】玩得开心
推荐阅读
- 解决方案错误(在Android SDK中找不到gradle包装器。可能需要更新你的Android SDK)
- 5个最佳的免费RTF编辑器javascript和jQuery插件
- 5+最好的javascript和jQuery颜色选择器插件
- 5+最佳的javascript和jQuery照片放大镜插件
- 5个最好的javascript免费图表库
- GPS Android - 只定位一次
- Android Studio GeoDataClient无法解析
- 在Android 8中使用带DOZE的GPS
- Android kotlin - 应用程序在检查GPS是否启用时停止