uniapp 打开文件管理器上传(H5、微信小程序、android app三端)文件

H5跟安卓APP 手机打开的效果图:

Vue页面:

<template><view class="content"><button @click="uploadFiles">点击上传</button></view>
</template><script>export default {data() {return {}},methods: {//h5、微信小程序、app上传文件uploadFiles() {//#ifdef H5uni.chooseFile({count: 1,extension: ['.doc,.xlsx,.docx'],success: res => {uni.showLoading({title: '导入中...',mask: true});uni.uploadFile({url: this.$BASE_URL + 'api/uploads/upload',file: res.tempFiles[0],name: 'file',success: (res) => {},});}});//#endif// #ifdef MP-WEIXINuni.chooseMessageFile({count: 1, //默认100success: res => {uni.showLoading({title: '导入中...',mask: true});uni.uploadFile({url: this.$BASE_URL + 'api/uploads/upload',filePath: res.tempFiles[0].path,name: 'file',success: (res) => {},});}});//#endif// #ifdef APP-VUE//在这里导入打开安卓app本地文件选择器的封装方法this.$common.androidChooseFile(res => {var tempFiles = res;uni.uploadFile({url: this.$BASE_URL + 'api/uploads/upload',filePath: tempFiles,name: 'file',success: (res) => {}});},'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')// #endif},},}
</script><style scoped></style>

封装的公共方法库utils/common.js: 

var common = {}
//安卓本地文件选择器
common.androidChooseFile = (callback, acceptType) => {var CODE_REQUEST = 1000;var main = plus.android.runtimeMainActivity();if (plus.os.name == 'Android') {var Intent = plus.android.importClass('android.content.Intent');var intent = new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);if (acceptType) {intent.setType(acceptType);} else {intent.setType("*/*");}main.onActivityResult = (requestCode, resultCode, data) => {if (requestCode == CODE_REQUEST) {const uri = data.getData();plus.android.importClass(uri);const Build = plus.android.importClass('android.os.Build');const isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;const DocumentsContract = plus.android.importClass('android.provider.DocumentsContract');if (isKitKat && DocumentsContract.isDocumentUri(main, uri)) {if ("com.android.externalstorage.documents" == uri.getAuthority()) {console.log("6666");var docId = DocumentsContract.getDocumentId(uri);var split = docId.split(":");var type = split[0];if ("primary" == type) {var Environment = plus.android.importClass('android.os.Environment');callback(Environment.getExternalStorageDirectory() + "/" + split[1]);} else {var System = plus.android.importClass('java.lang.System');var sdPath = System.getenv("SECONDARY_STORAGE");if (sdPath) {callback(sdPath + "/" + split[1]);}}} else if ("com.android.providers.downloads.documents" == uri.getAuthority()) {var id = DocumentsContract.getDocumentId(uri);var ContentUris = plus.android.importClass('android.content.ContentUris');var contentUri = ContentUris.withAppendedId(//    Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));Uri.parse("content://downloads/public_downloads"), id);callback(getDataColumn(main, contentUri, null, null));} else if ("com.android.providers.media.documents" == uri.getAuthority()) {var docId = DocumentsContract.getDocumentId(uri);var split = docId.split(":");console.log(split);var type = split[0];console.log(type);var MediaStore = plus.android.importClass('android.provider.MediaStore');if ("image" == type) {contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;} else if ("video" == type) {contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;} else if ("audio" == type) {contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;} else {contentUri = MediaStore.Files.getContentUri("external");}console.log(contentUri);var selection = "_id=?";var selectionArgs = new Array();selectionArgs[0] = split[1];callback(getDataColumn(main, contentUri, selection, selectionArgs));}} else if ("content" == uri.getScheme()) {callback(getDataColumn(main, uri, null, null));} else if ("file" == uri.getScheme()) {callback(uri.getPath());}}}main.startActivityForResult(intent, CODE_REQUEST);}function getDataColumn(main, uri, selection, selectionArgs) {plus.android.importClass(main.getContentResolver());let cursor = main.getContentResolver().query(uri, ['_data'], selection, selectionArgs,null);plus.android.importClass(cursor);if (cursor != null && cursor.moveToFirst()) {var column_index = cursor.getColumnIndexOrThrow('_data');var result = cursor.getString(column_index)cursor.close();return result;}return null;}
}
export default common

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/212555.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生之深入解析Kubernetes策略引擎对比:OPA/Gatekeeper与Kyverno

一、前言 ① Kubernetes 策略 Kubernetes 的 Pod Security Policy&#xff0c;正如其名字所暗示的&#xff0c;仅是针对 Pod 工作的&#xff0c;是一种用来验证和控制 Pod 及其属性的机制。另外 PSP 只能屏蔽非法 Pod 的创建&#xff0c;无法执行任何补救/纠正措施。而 Gatek…

http与apache

目录 1.http相关概念 2.http请求的完整过程 3.访问浏览器背后的原理过程 4.动态页面与静态页面区别 静态页面&#xff1a; 动态页面&#xff1a; 5.http协议版本 6.http请求方法 7.HTTP协议报文格式 8.http响应状态码 1xx&#xff1a;提示信息 2xx&#xff1a;成功…

【C++11并发】Atomic 笔记

简介 用atomic定义的变量&#xff0c;支持原子操作&#xff0c;即要么全部完成操作&#xff0c;要不全部没有完成&#xff0c;我们是不可能看到中间状态。一般在多线程程序中&#xff0c;可以用atomic来完成数据同步。 标准库为我们主要提供了四类工具 atomic类模板操作atomi…

tomcat启动 页面报错404(3种解决方案)

1.端口号被占用 修改配置文件下的端口号&#xff1a;\apache-tomcat-8.5.57\conf\server.xml 我这里修改端口号为&#xff1a;9999 修改后页面输入&#xff1a;http://localhost:9999/ 2.没有配置环境变量 配置环境变量请查看&#xff1a;保姆级教程 3.查看下 apache-tomca…

SpringBoot Seata 死锁问题排查

现象描述&#xff1a;Spring Boot项目&#xff0c;启动的时候卡住了&#xff0c;一直卡在那里不动&#xff0c;没有报错&#xff0c;也没有日志输出 但是&#xff0c;奇怪的是&#xff0c;本地可以正常启动 好吧&#xff0c;姑且先不深究为什么本地可以启动而部署到服务器上就无…

【Flink系列五】Checkpoint及Barrier原理

本章内容 一致性检查点从检查点恢复状态检查点实现算法-barrier保存点Savepoint状态后端&#xff08;state backend&#xff09; 本文先设置一个前提&#xff0c;流处理的数据都是可回放的&#xff08;可以理解成消费的kafka的数据&#xff09; 一致性检查点&#xff08;che…

单片机第三季-第四课:STM32下载、MDK和调试器

目录 1&#xff0c;扩展板使用的STM32芯片类型 2&#xff0c;使用普中科技软件下载程序 3&#xff0c;keil介绍 4&#xff0c;JLINK调试器介绍 5&#xff0c;使用普中的调试器进行debug 6&#xff0c;使用Simulator仿真 1&#xff0c;扩展板使用的STM32芯片类型 扩展版…

如何用docker在自己服务器上部署springboot项目

一、将springboot项目打包 1、maven clean项目 2、maven package项目 打包成功之后生成jar文件&#xff08;在target目录下&#xff09; 3、为Java创建Dockerfile 引入jdk8的Docker镜像 FROM openjdk:8 为了使运行其余命令时更容易&#xff0c;让我们设置映像的工作目录。这将…

1、初识 llvm源码编译 及virtualbox和ubuntu环境搭建

很久没更新了&#xff0c;最近准备研究逆向和加固&#xff0c;于是跟着看雪hanbing老师学习彻底搞懂ollvm&#xff0c;终于把所有流程跑通了&#xff0c;中间遇到了太多的坑&#xff0c;所以必须记录一下&#xff0c;能避免自己和帮助他人最好。 环境搭建太重要了&#xff0c;…

26、pytest使用allure解读

官方实例 # content of pytest_quick_start_test.py import allurepytestmark [allure.epic("My first epic"), allure.feature("Quick start feature")]allure.id(1) allure.story("Simple story") allure.title("test_allure_simple_te…

LabVIEW使用单板RIO开发远程监控电源信号

LabVIEW使用单板RIO开发远程监控电源信号 设计和构建用于智能电网的本地功耗分析系统&#xff0c;主要服务于领先的电力监控设备设计者和制造商。随着智能电网投资的增加&#xff0c;对于能够有效处理替代电源&#xff08;如太阳能和风能&#xff09;间歇性功率水平的技术需求…

vue 提交表单重复点击,重复提交防抖问题

问题&#xff1a;用户点击保存时&#xff0c;可能会多次点击。导致生成重复数据。 目标&#xff1a;多次点击时&#xff0c;1s内只允许提交一次数据。 解决方案&#xff1a; 1.在utils文件夹创建文件preventReClick.js export default {install (Vue) {// 防止按钮重复点击V…

lv11 嵌入式开发 IIC(上) 19

目录 1 IIC总线简介 1.1 串行、半双工&#xff08;同时只能1收或者1发&#xff09; 1.2 IIC总线通信过程 2 IIC总线信号实现 2.1 IIC总线寻址方式 2.2 起始信号和停止信号 2.3 字节传送与应答 2.4 同步信号 2.5 典型IIC时序 3 练习 1 IIC总线简介 1.1 串行、半双工&a…

2.5D封装与3D IC封装主流产品介绍

2.5D封装和3D IC封装都是新兴的半导体封装技术&#xff0c;它们都可以实现芯片间的高速、高密度互连&#xff0c;从而提高系统的性能和集成度。但是它们之间也存在一些差异和异同点。 1、3D 结构与 2.5D 有何不同&#xff1f; 首先&#xff0c;2.5D封装和3D IC封装的互连方式有…

Chrome浏览器禁止更新策略

在做爬虫过程中&#xff0c;需要用到Selenium驱动浏览器去做动态爬虫 这里我一般用到的是Chrome谷歌浏览器进行爬虫 但是&#xff0c;目前python和Chrome浏览器适配最好的是110.版本 尽管我用了很多种方法 去取消浏览器自动更新 但是 过一段时间 浏览器总是会自动更新到最新…

Linux Docker 安装Nginx

1.21、查看可用的Nginx版本 访问Nginx镜像库地址&#xff1a;https://hub.docker.com/_/nginx 2、拉取指定版本的Nginx镜像 docker pull nginx:latest #安装最新版 docker pull nginx:1.25.3 #安装指定版本的Nginx 3、查看本地镜像 docker images 4、根据镜像创建并运行…

TCP单聊和UDP群聊

TCP协议单聊 服务端&#xff1a; import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.V…

geemap学习笔记022:如何找出一年中最绿的一天?

前言 这虽然是一个问题&#xff0c;但是解决这个问题之后&#xff0c;就会学习到很多的内容。包括如何计算NDVI、如何进行镶嵌、如何获取影像的时间等等。 1 导入库并显示地图 import ee import geemapee.Initialize() Map geemap.Map() Map2 定义一个感兴趣区&#xff08;…

新书推荐——《Copilot和ChatGPT编程体验:挑战24个正则表达式难题》

《Copilot和ChatGPT编程体验&#xff1a;挑战24个正则表达式难题》呈现了两方竞争的格局。一方是专业程序员David Q. Mertz&#xff0c;是网络上最受欢迎的正则表达式教程的作者。另一方则是强大的AI编程工具OpenAI ChatGPT和GitHub Copilot。 比赛规则如下&#xff1a;David编…

【Flink系列二】如何计算Job并行度及slots数量

接上文的问题 并行的任务&#xff0c;需要占用多少slot &#xff1f;一个流处理程序&#xff0c;需要包含多少个任务 首先明确一下概念 slot&#xff1a;TM上分配资源的最小单元&#xff0c;它代表的是资源&#xff08;比如1G内存&#xff0c;而非线程的概念&#xff0c;好多…