You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
6.9 KiB
209 lines
6.9 KiB
/* eslint-disable */
|
|
var pickFile = {
|
|
//调用原生文件系统管理器并选取文件获取文件地址
|
|
PickFile: function(callback, mimeTypes) {
|
|
console.log(plus)
|
|
if (plus.os.name.toLowerCase() != "android") {
|
|
uni.showModal({
|
|
title: "提示",
|
|
content: "仅支持Android平台",
|
|
success: function(res) {},
|
|
});
|
|
return false;
|
|
}
|
|
let that = this;
|
|
|
|
let main = plus.android.runtimeMainActivity();
|
|
let Intent = plus.android.importClass("android.content.Intent");
|
|
|
|
let fileIntent = new Intent(Intent.ACTION_GET_CONTENT);
|
|
/**
|
|
* let mimeType = ["image/*", "application/*|text/*","application/vnd.ms-powerpoint",
|
|
* "application/vnd.openxmlformats-officedocument.presentationml.presentation",];
|
|
* */
|
|
let mimeType = [
|
|
// "image/png",
|
|
// "image/jpg",
|
|
// "image/jpeg",
|
|
// "application/msword",
|
|
// "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
// "application/vnd.ms-excel",
|
|
// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
"application/pdf",
|
|
];
|
|
fileIntent.setType("*/*"); //无类型限制
|
|
// fileIntent.setType("application/*");
|
|
// fileIntent.setType(mineType);
|
|
fileIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimeType);
|
|
fileIntent.addCategory(Intent.CATEGORY_OPENABLE);
|
|
main.startActivityForResult(fileIntent, 10000);
|
|
let _this = pickFile;
|
|
// 获取回调
|
|
main.onActivityResult = function(requestCode, resultCode, data) {
|
|
let Activity = plus.android.importClass("android.app.Activity");
|
|
let ContentUris = plus.android.importClass("android.content.ContentUris");
|
|
let Cursor = plus.android.importClass("android.database.Cursor");
|
|
let Uri = plus.android.importClass("android.net.Uri");
|
|
let Build = plus.android.importClass("android.os.Build");
|
|
let Environment = plus.android.importClass("android.os.Environment");
|
|
let DocumentsContract = plus.android.importClass(
|
|
"android.provider.DocumentsContract"
|
|
);
|
|
let MediaStore = plus.android.importClass("android.provider.MediaStore");
|
|
// 给系统导入 contentResolver
|
|
let contentResolver = main.getContentResolver();
|
|
plus.android.importClass(contentResolver);
|
|
// 返回路径
|
|
let path = "";
|
|
if (resultCode == Activity.RESULT_OK) {
|
|
let uri = data.getData();
|
|
if ("file" == uri.getScheme().toLowerCase()) {
|
|
//使用第三方应用打开
|
|
path = uri.getPath();
|
|
return;
|
|
}
|
|
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
|
|
//4.4以后
|
|
path = getPath(this, uri);
|
|
} else {
|
|
//4.4以下下系统调用方法
|
|
path = getRealPathFromURI(uri);
|
|
}
|
|
// 回调
|
|
console.warn("path---------->", path);
|
|
// 获取file:///本地文件大小
|
|
getFileSize(path);
|
|
// that.$emit("result", path);
|
|
}
|
|
// 4.4 以上 从Uri 获取文件绝对路径
|
|
function getPath(context, uri) {
|
|
let isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
|
|
let scheme = uri.getScheme().toLowerCase();
|
|
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
|
|
// ExternalStorageProvider
|
|
if (isExternalStorageDocument(uri)) {
|
|
let docId = DocumentsContract.getDocumentId(uri);
|
|
let split = docId.split(":");
|
|
let type = split[0];
|
|
// 如果是手机内部存储
|
|
if ("primary" == type.toLowerCase()) {
|
|
return Environment.getExternalStorageDirectory() + "/" + split[1];
|
|
} else {
|
|
return "/storage/" + type + "/" + split[1];
|
|
}
|
|
}
|
|
// DownloadsProvider
|
|
else if (isDownloadsDocument(uri)) {
|
|
let id = DocumentsContract.getDocumentId(uri);
|
|
let split = id.split(":");
|
|
return split[1];
|
|
// console.log(id)
|
|
// let contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), id);
|
|
}
|
|
// MediaProvider
|
|
else if (isMediaDocument(uri)) {
|
|
let docId = DocumentsContract.getDocumentId(uri);
|
|
let split = docId.split(":");
|
|
let type = split[0];
|
|
let contentUri = null;
|
|
if ("image" == type.toLowerCase()) {
|
|
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
|
} else if ("video" == type.toLowerCase()) {
|
|
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
|
|
} else if ("audio" == type.toLowerCase()) {
|
|
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
|
|
}
|
|
let selection = "_id=?";
|
|
let selectionArgs = [split[1]];
|
|
return getDataColumn(context, contentUri, selection, selectionArgs);
|
|
}
|
|
}
|
|
// MediaStore (and general)
|
|
else if ("content" == scheme) {
|
|
return getDataColumn(context, uri, null, null);
|
|
}
|
|
// File
|
|
else if ("file" == scheme) {
|
|
return uri.getPath();
|
|
}
|
|
}
|
|
// 4.4 以下 获取 绝对路径
|
|
function getRealPathFromURI(uri) {
|
|
let res = null;
|
|
let proj = [MediaStore.Images.Media.DATA];
|
|
let cursor = contentResolver.query(uri, proj, null, null, null);
|
|
if (null != cursor && cursor.moveToFirst()) {
|
|
let column_index = cursor.getColumnIndexOrThrow(
|
|
MediaStore.Images.Media.DATA
|
|
);
|
|
res = cursor.getString(column_index);
|
|
cursor.close();
|
|
}
|
|
return res;
|
|
}
|
|
// 通过uri 查找出绝对路径
|
|
function getDataColumn(context, uri, selection, selectionArgs) {
|
|
let cursor = null;
|
|
let column = "_data";
|
|
let projection = [column];
|
|
// let contentResolver = context.getContentResolver()
|
|
// plus.android.importClass(contentResolver);
|
|
cursor = contentResolver.query(
|
|
uri,
|
|
projection,
|
|
selection,
|
|
selectionArgs,
|
|
null
|
|
);
|
|
if (cursor != null && cursor.moveToFirst()) {
|
|
let column_index = cursor.getColumnIndexOrThrow(column);
|
|
return cursor.getString(column_index);
|
|
}
|
|
}
|
|
|
|
function isExternalStorageDocument(uri) {
|
|
return "com.android.externalstorage.documents" == uri.getAuthority() ?
|
|
true :
|
|
false;
|
|
}
|
|
|
|
function isDownloadsDocument(uri) {
|
|
return "com.android.providers.downloads.documents" == uri.getAuthority() ?
|
|
true :
|
|
false;
|
|
}
|
|
|
|
function isMediaDocument(uri) {
|
|
return "com.android.providers.media.documents" == uri.getAuthority() ?
|
|
true :
|
|
false;
|
|
}
|
|
/* 获取文件大小 */
|
|
function getFileSize(filePath) {
|
|
const File = plus.android.importClass("java.io.File");
|
|
let file = new File(filePath);
|
|
// console.warn(file.length());
|
|
// 回调
|
|
callback(filePath, convertfilesize(file.length()));
|
|
}
|
|
/* 文件size转换 */
|
|
function convertfilesize(size) {
|
|
//把字节转换成正常文件大小
|
|
if (!size) return "";
|
|
var num = 1024.0; //byte
|
|
if (size < num) return size + "B";
|
|
if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + "KB"; //kb
|
|
if (size < Math.pow(num, 3))
|
|
return (size / Math.pow(num, 2)).toFixed(2) + "MB"; //M
|
|
if (size < Math.pow(num, 4))
|
|
return (size / Math.pow(num, 3)).toFixed(2) + "G"; //G
|
|
return (size / Math.pow(num, 4)).toFixed(2) + "T"; //T
|
|
}
|
|
};
|
|
},
|
|
};
|
|
|
|
module.exports = {
|
|
pickFile: pickFile,
|
|
};
|
|
/* eslint-disable no-new */ |