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
相关文章:
uniapp 打开文件管理器上传(H5、微信小程序、android app三端)文件
H5跟安卓APP 手机打开的效果图: Vue页面: <template><view class"content"><button click"uploadFiles">点击上传</button></view> </template><script>export default {data() {return…...
掌控安全 -- header注入
http header注入 该注入是指利用后端验证客户端口信息(比如常用的cookie验证)或者通过http header中获取客户端的一些信息(比如useragent用户代理等其他http header字段信息),因为这些信息是会重新返回拼接到后台中的&…...
windows批处理脚本(.bat)如何激活Anconda Prompt虚拟环境
通过call 来调用激活脚本, activate myenv指的是要激活的环境,若省略,则激活的是base环境。 call : 从另一个批处理程序调用一个批处理程序,而不停止父批处理程序。 call C:\ProgramData\Anaconda3\Scripts\activate.bat activate…...
扩散模型实战(十四):扩散模型生成音频
推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四ÿ…...
《微信小程序开发从入门到实战》学习四十七
4.4 云函数 4.4.5 云函数的定时触发 如果云函数需要定时执行,可以使用云函数定时触发器。配置了定时触发器,云函数会在相应时间点被自动触发。函数返回结果不会返回调用方 在需要添加触发器的云函数下新建文件config.json。格式如下: &quo…...
LeetCode刷题笔记之数组
一、二分查找 1. 704【二分查找】 题目: 给定一个 n 个元素 有序的(升序) 整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。代码:…...
ViT:视觉 Transformer
ViT:视觉 Transformer 网络结构Transformer 编码器MLP 头CNN 和 Transformer 网络结构 Transformer 的优势:注意力机制相当于一个多标签检索系统,位置嵌入能知道每个单词的位置,而且适合并行。 尝试把 Transformer 迁移到视觉领…...
Jmeter 请求签名api接口-BeanShell
Jmeter 请求签名api接口-BeanShell 项目签名说明编译扩展jar包jmeter 使用 BeanShell 调用jar包中的签名方法 项目签名说明 有签名算法的api接口本地不好测试,使用BeanShell 扩展jar 包对参数进行签名,接口签名算法使用 sha512Hex 算法。签名的说明如下…...
No suitable driver found for jdbc:mysql://localhost:3306(2023/12/7更新)
有两种情况: 压根没安装下载了但没设为库或方法不对 大多数为第一种情况: 一. 下载jdbc 打开网址选择一个版本进行下载 https://nowjava.com/jar/version/mysql/mysql-connector-java.html 二.安装jdbc 在项目里建一个lib文件夹 在把之前下载的jar文…...
word文档中数字格式转换(排版助手)
示例:李老师收入了234243.33元,产量3000公斤; 张老师收入了2324324元,产量45555公斤; 孙老师收入了600000元,产量2342公斤 王老师收入了1234443243元,产量1243142公斤。 1、数字批量转换成千…...
阿里云docker加速
文章目录 一、 阿里云镜像仓库配置二、配置加速1. CentOS2. Mac3. Windows注意 一、 阿里云镜像仓库配置 1.注册阿里云账号,并登陆到阿里云后台,进入控制台面板 2.进入控制台以后,找到左上方的三横的功能列表按钮,在弹出来的功能…...
Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
0x01 产品简介 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中,针对网络流量的信息进行日志留存,可对用户上网行为进行审计,逐渐形成大数据采集、 大数据分析、 大数据整合的工作模式…...
openGauss学习笔记-152 openGauss 数据库运维-备份与恢复-物理备份与恢复之PITR恢复
文章目录 openGauss学习笔记-152 openGauss 数据库运维-备份与恢复-物理备份与恢复之PITR恢复152.1 背景信息152.2 前提条件152.3 PITR恢复流程152.4 recovery.conf文件配置**152.4.1 归档恢复配置****152.4.2 恢复目标设置** openGauss学习笔记-152 openGauss 数据库运维-备份…...
PhpStorm基本配置及常用快捷键
重要Preference配置 激活服务器 http://jetbrains.tencent.click/http://owo.helphttp://idea.imsxm.com/http://www.0-php.com:10172017.3以上版本 JetBrains IDE 2017.3以上版本,激活检测机制变成了动态封禁域名,导致大部分域名激活被屏蔽了࿰…...
Autosar通信实战系列05-CanNM模块进阶常见问题思考
本文框架 前言1. UDS 0x28服务控制Nm报文收发后对状态机有影响?2. 节点网络启动后第一帧是否必须是网络管理报文?3. 主动唤醒后发送的第一帧报文为NM报文如何配置?4. CanNmMsgCycleOffset的使用场景?5. 什么情况下CBV中RepeatMessageRequest Bit置位?6. 主动(本地)唤醒与…...
Java中多态的一些简单理解
什么是多态 1.面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 2.多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发…...
011 数据结构_哈希
前言 本文将会向你介绍哈希概念,哈希方法,如何解决哈希冲突,以及闭散列与开散列的模拟实现 1. 哈希概念 顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经…...
案例025:基于微信小程序的移动学习平台的设计与实现
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...
写实3D游戏模型纹理贴图设置
在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格: …...
如何基于Akamai IoT边缘平台打造一个无服务器的位置分享应用
与地理位置有关的应用相信大家都很熟悉了,无论是IM软件里的位置共享或是电商、外卖应用中的配送地址匹配,我们几乎每天都在使用类似的功能与服务。不过你有没有想过,如何在自己开发的应用中嵌入类似的功能? 本文Akamai将为大家提…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
