uniapp(安卓)之文件上傳

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

 

鑽研不易,轉載請註明出處。。。。。。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章