uniapp附件上传及预览
uniapp 实现表单中包括上传附件uniapp做的原生android开发,动态表单数据录入的时候有时候需要上传附件和拍照视频功能1.进行android平台的判断if (plus.os.name.toLowerCase() != "android") {uni.showModal({title: '提示',content: '仅支持Android平台',success: function(res)
·
uniapp 实现表单中包括上传附件
uniapp做的原生android开发,动态表单数据录入的时候有时候需要上传附件和拍照视频功能
1.进行android平台的判断
if (plus.os.name.toLowerCase() != "android") {
uni.showModal({
title: '提示',
content: '仅支持Android平台',
success: function(res) {}
});
return false
}
let main = plus.android.runtimeMainActivity();
let Intent = plus.android.importClass("android.content.Intent");
let fileIntent = new Intent(Intent.ACTION_GET_CONTENT)
fileIntent.setType("*/*"); //无类型限制
fileIntent.addCategory(Intent.CATEGORY_OPENABLE);
main.startActivityForResult(fileIntent, 1);
// 获取回调
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");
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)
}
// 回调
let arr = path.split('/')
let fileName = arr[arr.length - 1]
that.files.push({
path: path,
name: fileName
})
}
// 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)) {
/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]
}
// 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];
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
}
转化base64
handControllGetBase64(file, callback) {
//h5不可用
uni.saveFile({
tempFilePath: file,
success: (saveFile) => {
//pathToBase64为uniapp 插件市场的插件内方法
pathToBase64(saveFile.savedFilePath).then(base64 => {
//用完就删
uni.removeSavedFile({
filePath: saveFile.savedFilePath
});
//返回
callback(base64);
})
},
fail: (err) => {
console.log(err)
}
});
},
附件的预览
// 附件预览
previewFile(obj) {
let that = this
let path = ''
if (obj.path) {
uni.openDocument({
filePath: obj.path,
success(res) {},
fail(res) {
uni.showToast({
title: '无法打开的文件类型'
})
}
})
} else {
let path = ''
let url = ‘xxx’
uni.downloadFile({
url: url,
header: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'charset': 'UTF-8'
},
success: function(res) {
if (res.statusCode == 200) {
path = res.tempFilePath;
uni.openDocument({
filePath: path,
success(res) {},
fail(res) {
uni.showToast({
title: '无法打开的文件类型',
icon: 'none'
})
}
})
} else {
uni.showToast({
title: '下载附件失败',
icon: 'none'
})
}
}
})
}
},
更多推荐
已为社区贡献11条内容
所有评论(0)