小工具知识网

当前位置: 首页 > 行业知识 > uniapp 附件(图片、pdf、word、excle)上传、在线预览 (Android、Ios)(附送250套精选微信小程序源码)

行业知识

uniapp 附件(图片、pdf、word、excle)上传、在线预览 (Android、Ios)(附送250套精选微信小程序源码)

2026-10-31 12:34:48 来源:互联网转载

一、PDF预览

1、下载PDF预览相关文件

  • 下载地址
  • 解压后效果:

    2、使用步骤

    • 在  static  文件夹下新建  pdf  文件夹,将解压文件放进  pdf  文件夹下(看网上很多博主把文件夹放在根目录里,我反正之前试到最后始终无法打开预览请求的PDF文件!  避坑  :放在  static 文件夹下就没问题了)
    • 如图所示:

      tool.js写打开pdf方法

      //PDF文件预览-Android(IOS直接打开)openPDF : (filePath) => {//检查终端uni.getSystemInfo({success: function(e) {//如果是安卓用第三方if (e.platform == 'android' || e.platform == 'windows') {//filepath带参数的 所以用缓存带过去uni.setStorageSync('openPDF_filePath', filePath)uni.navigateTo({url: `/pages/openPDF/index`})} else {//ios直接打开pdfuni.showLoading({title: '文档打开中...',mask: true})uni.downloadFile({url: filePath,complete: (res) => {uni.openDocument({filePath: res.tempFilePath,success: function(e) {uni.hideLoading()console.log('打开文档成功');}});}});}}})},

      页面/pages/openPDF/index

      export default {data() {return {webViewUrl: '',}},methods : {},onLoad(options) {//https://www.sichewang.com/62a00a5e11c381654655582.pdflet path = uni.getStorageSync('openPDF_filePath')let fileUrl = encodeURIComponent(path)this.webViewUrl = `/static/openPDF/html/web/viewer.html?file=${fileUrl}`}}

      main.js全局引入tool.js

      import tool from '@/utils/tool'Vue.prototype.$tool = tool

      使用

      if (this.fjClickObj.file_name.includes('pdf')) {let url = this.$Api.url + '/get_uploads?sys=602&url=' + this.fjClickObj.url;console.log(url)this.$tool.openPDF(url)} 

      二、word、excle 预览

      if (this.fjClickObj.file_name.includes('doc') || this.fjClickObj.file_name.includes('xls')) {let that = thislet url = this.$Api.url + '/get_uploads?sys=602&url=' + this.fjClickObj.url;console.log(url)uni.downloadFile({url: url,success: function(res) {let filepathss = plus.io.convertLocalFileSystemURL(res.tempFilePath);console.log(filepathss)setTimeout(() =>uni.openDocument({filePath: filepathss,showMenu: false,success: function() {console.log("打开文档成功");},fail: function() {uni.showToast({title: '暂不支持此类型',duration: 2000,icon: "none",});}}),1000);},fail: function(res) {console.log(res); //失败}});}

      三、图片预览

      1、简单预览

      uni.previewImage({current: index,urls: urls,success: function(e) {console.log('预览成功');}})

      2、预览加长按保存

      //图片预览previewImage : (urls, current = 0) => {uni.previewImage({current: current,urls: urls,longPressActions: {itemList: ['保存图片'],success: function(data) {var url = urls[data.index]console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');// 先下载图片uni.downloadFile({    url,    success: (res) => {        // 获取到图片本地地址后再保存图片到相册(因为此方法不支持远程地址)        uni.saveImageToPhotosAlbum({            filePath: res.tempFilePath,            success: () => {uni.showToast({ title: "保存成功!" , icon:'none'});            },            fail: () => {uni.showToast({ title: "保存失败", icon : 'none' });            },        });    },});}}});},

      四、附件上传(图片、PDF、word、excle)

      uploadImg(eleName, index) {var vue = this;uni.getSystemInfo({success: function(e) {vue.deviceType = e.platform}})let device = this.deviceType.toLowerCase() == ('ios' || 'macos') ? 'ios' : 'android'console.log(device)if (device == 'android') {uni.showActionSheet({itemList: ['选择图片', '选择文件'],success: (res) => {console.log(res)if (res.tapIndex == 0) {// 从相册中选vue.$store.commit('setIsHideByChooseFile', true)uni.chooseImage({count: 9,sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有sourceType: ['album'], //从相册选择success: (image) => {console.log(image)var temp = ''if (image.tempFiles && image.tempFiles.length > 0) {image.tempFiles.forEach(item6 => {// #ifdef H5temp = item6.name// #endif// #ifdef APP-PLUStemp = item6.path.substring(item6.path.lastIndexOf('/') + 1, item6.path.length)// #endif//H5console.log(temp)//获取扩展名var nameKZ = temp.substring(temp.lastIndexOf(".") + 1, temp.length);console.log(nameKZ);if (nameKZ.includes('doc') || nameKZ.includes('xls') || nameKZ.includes('pdf') || nameKZ.includes('png') ||nameKZ.includes('jpg') || nameKZ.includes('jpeg') || nameKZ.includes('bmp')) {} else {uni.showToast({title: '附件只能上传图片、pdf、word、excel',icon: 'none'});return}let tempUrl = ''let tempName = ''//逐个上传   单张图片上传uni.showLoading({title: '附件上传中...'});this.$Api.uploadFile([item6.path], 390000,res => {console.log(res)tempUrl = this.$Api.url +'/get_uploads?sys=602&url=' +res[0].file_pathtempName = res[0].file_nameconsole.log(tempUrl)let data = {url: tempUrl,file_url: res[0].file_path,file_name: tempName,file_size: (item6.size / 1024).toFixed(1) + 'kb',file_ext: temp.substring(temp.lastIndexOf('.') + 1,temp.length)}this.arrs_otherProfile.push(data)console.log(this.arrs_otherProfile)this.$forceUpdate()uni.hideLoading();}, e => {uni.hideLoading();})})}}});} else if (res.tapIndex == 1) {var _this = this// 选择文件vue.$store.commit('setIsHideByChooseFile', true)chooseFile(url => {console.log(url)// /storage/emulated/0/DCIM/Screenshots/IMG_20221105_151817.jpg//获取扩展名var nameKZ = url.substring(url.lastIndexOf(".") +1, url.length);console.log(nameKZ);if (nameKZ.includes('doc') || nameKZ.includes('xls') || nameKZ.includes('pdf') || nameKZ.includes('png') || nameKZ.includes('jpg') ||nameKZ.includes('jpeg') || nameKZ.includes('bmp')) {} else {uni.showToast({title: '附件只能上传图片、pdf、word、excel',icon: 'none'});return}//获取文件名var name = url.substring(url.lastIndexOf("/") + 1,url.length);console.log(name);uni.showLoading({title: '附件上传中...'});_this.$Api.uploadFile([url], 390000, res => {console.log(res)let file_path = _this.$Api.url +'/get_uploads?sys=602&url=' + res[0].file_pathlet data = {url: file_path,file_url: res[0].file_path,file_name: name,file_ext: name.substring(name.lastIndexOf('.') + 1,name.length)}_this.arrs_otherProfile.push(data)console.log(_this.arrs_otherProfile)uni.hideLoading();}, e => {console.log(e)uni.hideLoading();})})}}})} else if (device == 'ios') {vue.$store.commit('setIsHideByChooseFile', true)// 从相册中选uni.chooseImage({count: 9,sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有sourceType: ['album'], //从相册选择success: (image) => {console.log(image)var temp = ''if (image.tempFiles && image.tempFiles.length > 0) {image.tempFiles.forEach(item6 => {// #ifdef H5temp = item6.name// #endif// #ifdef APP-PLUStemp = item6.path.substring(item6.path.lastIndexOf('/') + 1, item6.path.length)// #endif//H5console.log(temp)//获取扩展名var nameKZ = temp.substring(temp.lastIndexOf(".") + 1, temp.length);console.log(nameKZ);if (nameKZ.includes('doc') || nameKZ.includes('xls') || nameKZ.includes('pdf') || nameKZ.includes('png') || nameKZ.includes('jpg') || nameKZ.includes('jpeg') || nameKZ.includes('bmp')|| nameKZ.includes('BMP') || nameKZ.includes('JPEG') ||nameKZ.includes('JPG') ||nameKZ.includes('PNG')) {} else {uni.showToast({title: '附件只能上传图片、pdf、word、excel',icon: 'none'});return}let tempUrl = ''let tempName = ''//逐个上传   单张图片上传uni.showLoading({title: '附件上传中...'});this.$Api.uploadFile([item6.path], 390000, res => {console.log(res)tempUrl = this.$Api.url + '/get_uploads?sys=602&url=' +res[0].file_pathtempName = res[0].file_nameconsole.log(tempUrl)let data = {url: tempUrl,file_url: res[0].file_path,file_name: tempName,file_size: (item6.size / 1024).toFixed(1) +'kb',file_ext: temp.substring(temp.lastIndexOf('.') + 1, temp.length)}this.arrs_otherProfile.push(data)console.log(this.arrs_otherProfile)this.$forceUpdate()uni.hideLoading();}, e => {// errorBack && errorBack(e)uni.hideLoading();})})}}});}},

      Androd 选择附件的文件

      var chooseFile = function(callback, acceptType) {        var CODE_REQUEST = 1000;    var main = plus.android.runtimeMainActivity();    if(plus.os.name == 'Android') {        console.log("666");        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)=>{console.log(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;console.log(Build.VERSION.SDK_INT)console.log(Build.VERSION_CODES.KITKAT)                const DocumentsContract = plus.android.importClass('android.provider.DocumentsContract');console.log(uri.getScheme())                if(isKitKat && DocumentsContract.isDocumentUri(main, uri)) {console.log(uri.getAuthority())                    if("com.android.externalstorage.documents" == uri.getAuthority()) {                        console.log("6666");                        var docId = DocumentsContract.getDocumentId(uri);                        var split = docId.split(":");                        var type = split[0];                        console.log(type);                        if("primary" == type) {                            var Environment = plus.android.importClass('android.os.Environment');console.log(Environment.getExternalStorageDirectory() + "/" + split[1]);                            callback(Environment.getExternalStorageDirectory() + "/" + split[1]);                        } else {                            var System = plus.android.importClass('java.lang.System');                            var sdPath = System.getenv("SECONDARY_STORAGE");console.log(sdPath)                            if(sdPath) {                                callback(sdPath + "/" + split[1]);                            }                        }                    }                    else if("com.android.providers.downloads.documents" == uri.getAuthority()) {console.log("7777");                        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(getDataColumn(main, contentUri, null, null));                    }                    else if("com.android.providers.media.documents" == uri.getAuthority()) {console.log("8888");                        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()) {console.log("9999");console.log("9999",main);console.log("9999",uri);                    callback(getDataColumn(main, uri, null, null));                }                else if("file" == uri.getScheme()) {console.log("0000");console.log(uri.getPath());                    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);console.log(result);        cursor.close();        return result;        }        return null;}export default chooseFile

       附送250套精选项目源码

      源码截图

      源码获取:关注公众号「码农园区」,回复 【源码】,即可获取全套源码下载链接

上一篇:服务器主板发霉怎么处理?

下一篇:vue3的echarts从后端获取数据,用于绘制图表