由于uniapp提供的api在app端只能上传图片和视频,不能上传其他文件,说以只能借助插件了。 iOS端用的这个插件 获取到文件对象 免费的 ios-uniapp 文件选取Word,pdf,xls等文件 - DCloud 插件市场uni
由于uniapp提供的api在app端只能上传图片和视频,不能上传其他文件,说以只能借助插件了。
iOS端用的这个插件 获取到文件对象 免费的
ios-uniapp 文件选取Word,pdf,xls等文件 - DCloud 插件市场uniapp iOS文件选取 iOS选取text,pdf,word,doc,xls,ppthttps://ext.dcloud.net.cn/plugin?id=1311
这个是返回一个 filePath 可用直接用于 uni.uploadFile 上传的路径,后面自己又改的File对象。
安卓部分主要通过plus 对象,来调用原生文件系统管理器来选取文件,并获取文件的路径和文件对象。调用 pickFile.PickFile 方法来选取文件,使用plus.io.resolveLocalFileSystemURL方法。该方法用于将本地文件路径转换为文件系统 URL,并返回对应的 FileEntry 对象。
微信小程序和H5那就简单了uniapp提供的API就可以
获取文件
methods: { sendFile() { // #ifdef H5 uni.chooseFile({ count: 1, // extension:['.zip','.doc'], success: (res) => { console.log(res); console.log('file:', res.tempFiles[0]); // File对象 // 可以在这里进行后续操作 } }); // #endif // #ifdef MP-WEIXIN console.log('WEIXIN'); wx.chooseMessageFile({ count: 10, type: 'file', success: (res) => { console.log('file:', res.tempFiles[0]); // File对象 // 可以在这里进行后续操作 } }) // #endif // #ifdef APP-PLUS switch (uni.getSystemInfoSync().platform) { case 'android': let permisionID = 'android.permission.READ_EXTERNAL_STORAGE' permision.requestAndroidPermission(permisionID) .then(res => { if (res == 1) { this.chooseFileAndroid() } else { uni.showModal({ title: '无法访问存储', content: '您已经关闭存储权限,您已经关闭存储权限,请在"设置-隐私-存储"中允许访问存储', success: (res) => { if (res.confirm) { // plus.runtime.openURL("package:"); } else if (res.cancel) { plus.runtime.openURL("package:"); console.log('用户点击取消'); } } }); } }) 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.totalBytesExpectedToSend let file = { path: filePath, name: name, size: size, type: 'file' } console.log(file); // File对象 // 可以在这里进行后续操作 } }); } } }); } }); }, // 安卓选择文件 chooseFileAndroid() { //调用原生文件系统管理器并选取文件获取文件地址 var pickFile = { PickFile: function(callback, mimeTypes ) { 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 (mimeTypes) { intent.setType("**"); } let _this = pickFile; main.onActivityResult = function(requestCode, resultCode, data) { if (requestCode == CODE_REQUEST) { var uri = data.getData(); 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)) { console.log("版本大于 4.4"); if ("com.android.externalstorage.documents" == uri.getAuthority()) { 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"), id); callback(_this.getDataColumn(main, contentUri, null, null)); } else if ("com.android.providers.media.documents" == uri.getAuthority()) { var docId = DocumentsContract.getDocumentId(uri); 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; } else { contentUri = MediaStore.Files.getContentUri("external"); } console.log("版本大于 4.4", type); var selection = "_id=?"; var selectionArgs = new Array(); selectionArgs[0] = split[1]; callback(_this.getDataColumn(main, contentUri, selection, selectionArgs)); } } else if ("content" == uri.getScheme()) { callback(_this.getDataColumn(main, uri, null, null)); } else if ("file" == uri.getScheme()) { callback(uri.getPath()); } } } main.startActivityForResult(intent, CODE_REQUEST); } }, getDataColumn: function(main, uri, selection, selectionArgs) { plus.android.importClass(main.getContentResolver()); let cursor = main.getContentResolver().query(uri, ['_data'], selection, selectionArgs, null); plus.android.importClass(cursor); console.log(cursor); if (cursor != null && cursor.moveToFirst()) { var column_index = cursor.getColumnIndexOrThrow('_data'); var result = cursor.getString(column_index) cursor.close(); return result; } return null; } } // 拿到文件路径后,获取文件对象file pickFile.PickFile((path) => { //返回的路径 console.log(path); plus.io.resolveLocalFileSystemURL(path, (entry) => { entry.file((file) => { // file 对象即为所需的文件对象 console.log("文件对象:", file); // 可以在这里进行后续操作 }, (error) => { console.log("获取文件对象出现异常", error); }); }, (error) => { console.log("解析本地文件路径出现异常", error); }); }, '*/*') }, }
来源地址:https://blog.csdn.net/weixin_44523517/article/details/131580335
--结束END--
本文标题: uniapp 发送全文件 支持App端ios、android,微信小程序,H5
本文链接: https://www.lsjlt.com/news/392668.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0