我的编程空间,编程开发者的网络收藏夹
学习永远不晚

uniapp图片或文件的预览和下载,兼容ios+安卓+浏览器+企业微信H5

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

uniapp图片或文件的预览和下载,兼容ios+安卓+浏览器+企业微信H5

一、前言

在uniapp的APP日常开发中,我们时常遇到一些兼容性问题,正如本文所提到的图片的预览和下载。在此功能的开发中,我常遇到以下四个问题:

  • 图片预览功能实现,但是PDF,word,xls文件无法打开。
  • 安卓的图片预览和文件查看功能正常,ios系统的手机却问题频出,时不时的无法打开文件。
  • 图片第一次可以打开,第二次就报404,找不到文件。
  • 预览不仅要满足安卓和ios系统,也要使浏览器+企业微信H5也要可以打开文件预览。

二、 图片预览功能实现,但是PDF,word,xls文件无法打开

uni.previewImage()是uniapp的图片预览API,经常与uni.chooseImage()一起使用,不过本文中我们只用到uni.previewImage()即可。注:此API只支持打开图片类型文件。

根据官网文档所说,他只有一个必填参数,那就是urls,也就是图片的路径,因为这个参数是一个数组,我用时,直接把路径放到了一个数组里用,current这个参数是url的索引值,不写就默认是0。

       // 预览图片        let url = 'https://www.123.com/'uni.previewImage({            current: 0,urls: [url],success: function(data) {console.log('预览成功');},fail: function(err) {console.log(‘预览失败+’+err.errMsg);}});

三、安卓的图片预览和文件查看功能正常,ios系统的手机却问题频出,时不时的无法打开文件。

uni.downloadFile():把文件下载到本地,返回的是文件下载后的临时路径。必传参数url,string类型。
uni.saveFile(OBJECT):把文件保存到本地。
uni.openDocument():在新页面打开打开文件,支持doc, xls, ppt, pdf, docx, xlsx, pptx格式,常常与文件下载连用。

使用简例如下:

uni.downloadFile({    url: url,    success: function(res) {             var filePath = res.tempFilePath;             uni.saveFile({                 tempFilePath:filePath,                 success:function(res){                     //保存成功并打开文件                     uni.openDocument({                        filePath: filePath,                        success: (res) => console.log('成功打开文档'),                        fail:(res)=>{uni.showToast({icon:'none',title:'文件打开失败',duration:2000                        })                       }                    })                 }             })        }});

在此功能是初始版本中,因为我发现此方法jpg,png等图片格式也都可以打开,抱着侥幸心理,我就不管是什么类型,就都用的这一套代码下载预览,后来安卓的图片预览和文件查看功能正常,ios系统的手机却问题频出,时不时的无法打开文件,改了好几个版本,都没从根本上解决问题。

后来我发现,每次打开图片,安卓手机都是直接打开到相册,但是ios的却是在app页面基础上直接打开,我怀疑是ios系统下载缓存机制与安卓不同,才会出现这样的问题,后来想了一套更加完善的方法(在第六章中展现)。

四、图片第一次可以打开,第二次就报404,找不到文件

这个问题好像是因为我们后端的原因,根据后端要求,让我在每次访问图片链接时,后面都拼接上时间戳,保证每次访问的链接结尾都不一样即可解决。

五、预览不仅要满足安卓和ios系统,也要使浏览器也可以打开文件预览

浏览器使用window.open(url,'_blank')即可打开,_blank是规定在新开页面打开文件,_self是在当前页面打开文件。
注:此方法在浏览器可以打开,但是发布到H5时,不一定有效。原以为H5的打开就类似于浏览器的打开方式,因此见浏览器可以打开,便没有测试。最近突然发现,此方法只能用于浏览器。企业微信H5端想要打开的话,则需要用window.location.assign(url);

六、最终版本-兼容安卓、ios、浏览器

下面便是我屡败屡战,实践出来的最终结果,既满足了安卓、ios、浏览器三端的兼容问题,又满足了不管图片还是文件都可以预览的条件。

知识补充:通过使用#ifdef、#endif、#ifdef指示符,我们可以区隔一些特定的代码。

let url = data.urllet type = data.type//如果是app走这里//#ifdef APP-PLUSlet times = Date.parse(new Date());//拼接时间戳(根据自己项目需要考虑是否拼接)uni.downloadFile({    url: url+'?code='+times,    success: function(res) {    var filePath = res.tempFilePath;    if (type=== 'jpg' || type === 'jpeg' || type === 'png' || type === 'gif' ) {        //如果是图片走这里uni.previewImage({            current: 0,            urls: [url],})    }else{        //如果是文件走这里uni.openDocument({            filePath: filePath,            success: (res) => console.log('成功打开文档'),            fail:(res)=>{                uni.showToast({                    icon:'none',                    title:'文件打开失败',                    duration:2000                    })            }        })    }}});//#endif//#ifdef H5//如果是浏览器走这里window.open(url,'_blank');//如果是H5走这里,如果这里没效果,可以把window.open(url,'_blank');注释掉试试window.location.assign(url);//#endif

创作不易,可以朝我竖一个大拇指嘛~

来源地址:https://blog.csdn.net/qq_45091359/article/details/127727201

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

uniapp图片或文件的预览和下载,兼容ios+安卓+浏览器+企业微信H5

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

uniapp图片或文件的预览和下载,兼容ios+安卓+浏览器+企业微信H5

一、前言 在uniapp的APP日常开发中,我们时常遇到一些兼容性问题,正如本文所提到的图片的预览和下载。在此功能的开发中,我常遇到以下四个问题: 图片预览功能实现,但是PDF,word,xls文件无法打开。安卓的图片预览和文件查看功能正常
2023-08-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录