uniapp 发送全文件 支持App端ios、android,微信小程序,H5

由于uniapp提供的API在app端只能上传图片和视频,不能上传其他文件,说以只能借助插件了。

 ios端用的这个插件 获取到文件对象 免费的

这个是返回一个 filePath 可用直接用于 uni.uploadFile 上传的路径,后面自己又改的File对象 全文件上传选择非原生2.0版 - DCloud 插件市场文件选择上传-支持APP-H5网页-微信小程序https://ext.dcloud.net.cn/plugin?id=5459

 安卓部分主要通过使用 Android 平台的相关类来实现选择文件和获取文件本地路径的功能,使用这些原生 Android 的类和方法,代码能够处理不同类型的文件选择器返回的文件 URI,并获取文件的本地路径。根据文件的 URI 类型和授权部分,代码执行相应的处理逻辑,从而实现选择文件和获取文件本地路径、File对象的功能。

微信小程序和H5那就简单了uniapp提供的API就可以

<template><view class=""><view class="" @click="sendFile"><text>获取文件</text></view></view>
</template>

   methods: {sendFile() {// #ifdef H5uni.chooseFile({count: 1,// extension:['.zip','.doc'],success: (res) => {console.log(res);console.log('file:', res.tempFiles[0]); // File对象}});// #endif// #ifdef MP-WEIXINconsole.log('WEIXIN');wx.chooseMessageFile({count: 10,type: 'file',success: (res) => {console.log('file:', res.tempFiles[0]); // File对象}})// #endif// #ifdef APP-PLUSswitch (uni.getSystemInfoSync().platform) {case 'android':this.chooseFile((path) => {console.log('文件本地路径:', path);plus.io.requestFileSystem(plus.io.PRIVATE_DOC, (fs) => {fs.root.getFile(path, {create: true}, (fileEntry) => {fileEntry.file((file) => {let fileReader = new plus.io.FileReader();console.log(file);console.log(fileReader);console.log("文件对象:" + JSON.stringify(file)); // File对象}, (error) => {console.log("读写出现异常", error);});});});})break;case 'ios':this.filePathIos()break;}// #endif},// ios 选择文件filePathIos() {// 示例代码:const iOSFileSelect = uni.requireNativePlugin('YangChuan-YCiOSFileSelect');// apple document-types 文件类型参数 https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html// 文件类型参数let params = {"document-types": ["public.text", "public.zip", "public.data", "com.adobe.pdf","com.microsoft.word.doc", "com.adobe.postscript", "com.microsoft.excel.xls","com.adobe.encapsulated- postscript", "com.microsoft.powerpoint.ppt","com.adobe.photoshop- image", "com.microsoft.word.rtf", "com.microsoft.advanced- systems-format","com.microsoft.advanced- stream-redirector"],"isBase64": 0}iOSFileSelect.show(params, result => {let status = parseInt(result.status);// 状态200选取成功if (status == 200) {let url = result.url;uni.downloadFile({url: url,success: (res) => {if (res.statusCode == 200) {// filePath 可用于 uni.uploadFile 上传的路径let filePath = res.tempFilePath;let name = filePath.split("/")[filePath.split("/").length - 1];console.log(result);const uploadTask = uni.uploadFile({url: 'https://上传接口', //仅为示例,非真实的接口地址filePath: filePath,name: 'file',formData: {'user': 'test'},success: (uploadFileRes) => {console.log(uploadFileRes.data);}});uploadTask.onProgressUpdate((res) => {console.log(res);console.log('上传进度' + res.progress);console.log('已经上传的数据长度' + res.totalBytesSent);console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);// 测试条件,取消上传任务。if (res.progress > 1) {uploadTask.abort();let size = res.totalBytesExpectedToSendlet file = {path: filePath,name: name,size: size,type: 'file'}console.log(file); // File对象}});}}});}});},// 安卓选择文件chooseFile(callback) {console.log('choodeFile')var CODE_REQUEST = 1000;var main = plus.android.runtimeMainActivity();var Intent = plus.android.importClass('android.content.Intent');var intent = new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("*/*");main.onActivityResult = (requestCode, resultCode, data) => {if (requestCode == CODE_REQUEST) {var uri = data.getData();console.log('uri:', uri)// uri是编码过的,需要转换为本地路径plus.android.importClass(uri);var Build = plus.android.importClass('android.os.Build');var isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;var DocumentsContract = plus.android.importClass('android.provider.DocumentsContract');if (isKitKat && DocumentsContract.isDocumentUri(main, uri)) {// DocumentProviderconsole.log('getAuthority:', uri.getAuthority())if (uri.getAuthority() == "com.android.externalstorage.documents") {// ExternalStorageProviderlet docId = DocumentsContract.getDocumentId(uri);let split = docId.split(":");let type = split[0];if (type === "primary") {let Environment = plus.android.importClass('android.os.Environment');callback(Environment.getExternalStorageDirectory() + "/" + split[1]);} else {let System = plus.android.importClass('java.lang.System');let sdPath = System.getenv("SECONDARY_STORAGE");if (sdPath) {callback(sdPath + "/" + split[1]);}}} else if (uri.getAuthority() == "com.android.providers.downloads.documents") {// DownloadsProvidervar id = DocumentsContract.getDocumentId(uri);var ContentUris = plus.android.importClass('android.content.ContentUris');var contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), id);callback(this.getDataColumn(main, contentUri, null, null));} else if (uri.getAuthority() == "com.android.providers.media.documents") {// MediaProvidervar docId = DocumentsContract.getDocumentId(uri);console.log('docId:', docId)var split = docId.split(":");var type = split[0];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;}var selection = "_id=?";var selectionArgs = new Array();selectionArgs[0] = split[1];callback(this.getDataColumn(main, contentUri, selection, selectionArgs))}} else if (uri.getScheme() == "content") {if (uri.getAuthority() == "media") {callback(this.getDataColumn(main, uri, null, null));} else {callback(uri.getPath());}} else if (uri.getScheme() == "file") {// Fileconsole.log("file");callback(uri.getPath());}}}main.startActivityForResult(intent, CODE_REQUEST);},// main, uri, selection, selectionArgsgetDataColumn(main, uri, selection, selectionArgs) {plus.android.importClass(main.getContentResolver());var 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;}}

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

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

相关文章

【leetcode】15.三数之和(python+转为两数之和+去重)

class Solution(object):def threeSum(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""# 思路&#xff1a;转为两数之和# for循环遍历先固定一个数字a&#xff0c;寻找另外两个数字之和-a&#xff08;双指针&#xff09;# 难点…

C#基础学习_字段与属性的比较

C#基础学习_字段与属性的比较 字段: 字段主要是为类的内部做数据交互使用,字段一般是private修饰; 字段可以赋值也可以读取; 当需要为外部提供数据的时候,请将字段封装为属性,而不是使用公有字段,这是面对对象编程所提倡的。 //字段:学号private int studentID;属性: …

Redis 持久化

持久化结构图示 官网地址&#xff1a;https://redis.io/docs/management/persistence/ RDB (Redis DataBase) RDB&#xff08;Redis 数据库&#xff09;&#xff1a;RDB 持久性以指定的时间间隔执行数据集的时间点快照。 是什么 在指定的时间间隔&#xff0c;执行数据集的时间…

IllegalArgumentException: OnNoRibbonDefaultCondition异常与Maven Helper插件解决jar包冲突

在搭建Spring Cloud项目时&#xff0c;引入了不同版本的jar&#xff0c;导致项目启动时报错: main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.Bea…

html中表格

一、table标签 参数说明 实例 <body><table border"1" align"center" width"300" height"200" cellspacing"10"><tr><td>1.1</td><td>1.2</td><td>1.3</td></t…

【一】PCIe基础知识

一、PCIe概述 1、PCIe速度 PCI采用总线共享式通讯方式&#xff1b;PCIe采用点到点(Endpoint to Endpoint)通讯方式&#xff0c;互为接收端和发送端&#xff0c;全双工&#xff0c;基于数据包传输&#xff1b;两个PCIe设备之间的连接称作一条链路(link)&#xff0c; 一条链路可…

Arcgis之Python的Arcpy的点线面对象的创建处理和通过pandas读取txt中的经纬度坐标创建几何对象

前言 本节将介绍点线面对象的创建和处理。创建点对象有三个类&#xff0c;分别是Point、Multipoint、PointGeometry&#xff0c;创建线对象的类为Polyline&#xff0c;创建面对象的类为Polygon。 一、点对象的创建——Point 点对象经常与光标配合使用。点要素将返回单个点对…

VOC数据集介绍以及读取(目标检测object detection)

VOC&#xff08;Visual Object Classes&#xff09;数据集是一个广泛使用的计算机视觉数据集&#xff0c;主要用于目标检测、图像分割和图像分类等任务。VOC数据集最初由英国牛津大学的计算机视觉小组创建&#xff0c;并在PASCAL VOC挑战赛中使用。 VOC数据集包含各种不同类别…

Java安全——安全提供者

Java安全 安全提供者 在Java中&#xff0c;安全提供者&#xff08;Security Provider&#xff09;是一种实现了特定安全服务的软件模块。它提供了一系列的加密、解密、签名、验证和随机数生成等安全功能。安全提供者基础设施在Java中的作用是为开发人员提供一种扩展和替换标准…

ChatGPT 提示词设置

提示词 Prompt&#xff08;提示词&#xff09;&#xff1a;当我们询问GPT时&#xff0c;发送的消息就是Prompt。 通过给出合适的Prompt&#xff0c;可以让GPT了解我们的想法&#xff0c;在根据我们的想法做出更加合适的判断&#xff0c;帮助我们完成任务&#xff0c;提高效率。…

2023测试开发,需要具备的9项能力

作为一名测试开发&#xff0c;需要具备多项能力才能胜任测试开发工作。这些能力涵盖了技术和软技能两个方面。这些能力是相互关联的&#xff0c;相辅相成的&#xff0c;只有不断提升这些能力&#xff0c;才能更好地胜任测试开发工作&#xff0c;本篇文章就分享下我个人的理解 1…

(30)精准降落和悬停(IRLock)

文章目录 30.1 概述 30.2 哪里可以买到 30.3 连接到自动驾驶仪 30.4 安装到框架上 30.5 通过任务规划器进行设置 30.6 飞行和测试 30.1 概述 Copter 支持使用 IR-LOCK 传感器(IR-LOCK sensor)和声纳或激光雷达(sonar or lidar)进行精确着陆。使用该系统&#xff0c;当飞行…