首页 > 其他分享 >uniapp(安卓)之文件上传

uniapp(安卓)之文件上传

时间:2023-11-13 18:12:00浏览次数:33  
标签:uniapp console 安卓 let importClass uni plus android 上传

uniapp(安卓)之文件上传

uniapp提供的uni.chooseFile只支持H5和微信小程序,所以想上传除图片/视频外的非媒体文件,需要使用原生的方式开发。

		uploadtxdr() {
//使用plus选择文件 let that = this; let filePath = '' let main = plus.android.runtimeMainActivity(); let Intent = plus.android.importClass('android.content.Intent'); let Activity = plus.android.importClass('android.app.Activity'); let intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType('*/*'); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); //关键!多选参数 intent.addCategory(Intent.CATEGORY_OPENABLE); main.startActivityForResult(intent, 200); // 获取回调 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'); var MediaStore = plus.android.importClass('android.provider.MediaStore'); // 给系统导入 contentResolver let contentResolver = main.getContentResolver(); plus.android.importClass(contentResolver); if (resultCode == Activity.RESULT_OK) { // 解析路径 if (data.getData() != null) { let uri = data.getData() let path = uri.getPath() // 获取到选择文件的虚拟路径 let docId = DocumentsContract.getDocumentId(uri); let split = docId.split(":"); let type = split[0]; let selection = "_id=?"; let selectionArgs = new Array(); selectionArgs[0] = split[1]; uri = MediaStore.Files.getContentUri("external"); plus.android.importClass(main.getContentResolver()); // 通过查询的方式用虚拟路径的id1获取到文件的真实路径 let cursor = main.getContentResolver().query(uri, ['_data'], selection, selectionArgs, null); plus.android.importClass(cursor); if (cursor != null && cursor.moveToFirst()) { let column_index = cursor.getColumnIndexOrThrow('_data'); console.log(column_index) let result = cursor.getString(column_index) // result即文件的真实路径 cursor.close(); } // 从真实路径中提取文件信息 console.log('file://' + result) plus.io.resolveLocalFileSystemURL('file://' + result, (entry) => { entry.file((file) => { // file 对象即为所需的文件对象 console.log("文件对象:", file); // 可以在这里进行后续操作 }, (error) => { console.log("获取文件对象出现异常", error); }); }, (error) => { console.log("解析本地文件路径出现异常", error); }); } } } },

  后续发现可以使用plus.io.chooseFile直接获取虚拟路径,然后再通过路径转化获取文件信息。

let fileTypes = ['xls', 'zip']; // 允许的文件类型  
			let chooseFile = plus.io.chooseFile({
				title: '选择文件',
				filetypes: fileTypes,
				multiple: false // 是否允许多选  
			}, (e) => {
				console.log(e)
				console.log(e.files[0])
			});
		},

  获取文件真实路径是为了文件信息回显,文件上传使用 uni.uploadFile

                    uni.uploadFile({
						url: url + '/index/uploadFile', // 上传地址
						methods: "POST",
						name: 'file',
						filePath:that.filePath, // 本地路径
						// formData: formdata,
						header: {
							'content-type': 'application/x-www-form-urlencoded;     charset=UTF-8'
						},
						success: res => {
							// console.log("res--->",res)
							uni.hideLoading()
							let result = JSON.parse(res.data).data // 上传成功后的地址链接
							uni.showLoading({
								title:'开始AI合成'
							})
                            // 根据项目需求,自行删除
                            //拿到链接进行下一步处理
							uni.$u.http.post('/index/sync_audio',{
								id:id,
								url:result.url
							}).then(res => {
								// console.log("upload--->",res)
								if (res.data.code == 1) {
									uni.hideLoading()
									uni.$u.toast("上传成功")
									setTimeout(function() {
										let pages = getCurrentPages()
										let currentPage = pages[pages.length-1]
										// console.log("currentPage---->",currentPage)
										currentPage.$vm.$refs.paging.reload() // 刷新当前    列表
									}, 1200)
								} else {
									uni.hideLoading()
									uni.$u.toast(res.data.msg)
								}
							}).catch( err =>{
								uni.hideLoading()
								uni.$u.toast('生成失败')
							})
						},
						fail: res => {
							uni.hideLoading()
							uni.showToast({
								title: "文件上传失败"
							})
						},
						complete: res => {}
					})

  

参考链接:

https://blog.csdn.net/weixin_43048846/article/details/132834101

https://blog.csdn.net/weixin_44523517/article/details/131580335

 

钻研不易,转载请注明出处。。。。。。

 

 

 

 

翻译

搜索

复制

<iframe></iframe>

标签:uniapp,console,安卓,let,importClass,uni,plus,android,上传
From: https://www.cnblogs.com/s313139232/p/17829782.html

相关文章

  • Python | 将本地文件上传到远程服务器
    在Python中,可以使用paramiko库来通过SSH进行文件的传输。首先,你需要安装paramiko库,可以使用以下命令进行安装:pipinstallparamiko然后,你可以使用以下Python脚本进行文件传输:此脚本使用SFTP协议进行文件传输。在SFTP的上下文中,你可以使用put方法将本地文件上传到远程服务器。......
  • 前端大文件上传优化方案——分片上传
    介绍前端上传大文件的常见问题和解决方案,分片上传这样可以避免一次性上传大文件导致的网络超时、内存溢出、进度不可控等问题。要实现大文件分片上传,通常需要以下几个步骤:1.通过DOM获取文件对象,并且对文件进行MD5加密(文件内容+文件标题形式),采用SparkMD5进行文件加密;2.进行分片......
  • Java 小文件上传、大文件分片上传、断点续传、秒传的开发原理
    1、前言 文件上传在项目开发中再常见不过了,大多项目都会涉及到图片、音频、视频、文件的上传,通常简单的一个Form表单就可以上传小文件了,但是遇到大文件时比如1GB以上,或者用户网络比较慢时,简单的文件上传就不能适用了,用户辛苦传了好几十分钟,到最后发现上传失败,这样的系统用户体......
  • 如何将视频上传到可用于HTML5 <video> 标签的 'src' 属性的平台?
    要将视频上传到可用于HTML5<video>标签的'src'属性的平台,您需要遵循以下步骤:1.选择一个支持视频上传的平台,例如YouTube、Vimeo或自建服务器。2.注册并登录到所选平台。3.创建一个新的视频项目或上传您的视频文件。4.获取视频的嵌入代码或URL。这通常可以在平台的管理页......
  • 安卓-SSTP客户端连接教程
    下载SSTP通用连接客户端下载地址:http://cdn.xzpaladin.com/down/sstppro.apk下载后安装进安卓设备中并运行点击右下角的+添加配置选择新建SSTP配置文件名称可以随意填写点击远程服务器点击右下角的+添加服务器地址服务器查询:http://www.pldip.com/city**注意:根据购买的产品不同......
  • 【故障公告】阿里云OSS故障造成图片无法上传
    今天17:44~19:00期间,我们使用的阿里云对象存储OSS出现突发故障,造成图片无法上传,由此给您麻烦麻烦,请您谅解。故障期间对应的错误日志:TheOSSAccessKeyIdyouprovideddoesnotexistinourrecords.正当我们准备将图片上传切换到腾讯云COS时,19:00左右阿里云OSS......
  • 安卓自定义控件快速了解
    自定义控件,自定义视图方式,假设我们写好一个视图,就以这个视图封装起来做成一个组件,这个自定义的控件就想当方便以后相同功能时直接调用这个核心分为三步,第一步编写一个类继一个视图,这个继承的视图比如​RelativeLayout​,除了​RelativeLayout​以外,Android还提供了其他一些常用......
  • DVWA文件上传低级渗透流程(手把手教你)
    低级的文件上传环境没有进行过滤,所以可以直接上传一个php的木马文件,然后使用工具进行连接,进而获取到目标机器的图形化界面首先创建一个php的一句话木马文件保存为php格式,确定保存进入到上传文件的页面将方框内的相对路径复制粘贴到URL后面即可获得木马文件的绝对路径进入后若为空......
  • DVWA文件上传中级渗透流程(手把手教你)
    由于中级难度在前端页面进行了过滤,不允许php文件进行上传。所以我们需要在前端页面进行绕过,从而把文件上传到后端。首先在kali环境将kali用户切换到root管理员用户密码为kali打开burp抓包软件,burp软件能够在前端验证通过后,数据传到后端之前对数据包拦截,可以对数据包进行修改优化后......
  • uniapp 404页面
    需求:uniapp在写H5时,如果在地址栏乱输入,会跳转到404页面。思路:uniapp有个应用生命周期onPageNotFound,让跳转不存在的页面时会执行这个回调函数。所以需求就很好解决了!具体操作:第一步:写一个404页面,并在pages.json中配置其路由。第二步:在App.vue的onPageNotFound......