纯javascript前端实现base64图片下载(兼容IE10+)
网络编程 2021-07-04 16:46www.168986.cn编程入门
这篇文章主要介绍了纯javascript前端实现base64图片下载(兼容IE10+),长沙网络推广觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随长沙网络推广过来看看吧
背景
在项目开发过程中,经常会有图片导出的需求,尤其是带有图表类的应用,通常需要将图表下载导出。
在chrome等新版浏览器中实现base64图片的下载还是比较容易的
- 创建一个a标签
- 将a标签的href属性赋值为图片的base64编码
- 指定a标签的download属性,作为下载文件的名称
- 触发a标签的点击事件
这套逻辑在IE下是不行的,这样写会直接报错。
所以IE下需要单独处理,这里IE在处理这种文件的时候给提供了一个单独的方法window.navigator.msSaveOrOpenBlob(blob, download_filename)调用这个方法可以直接触发IE的下载,还是比较方便的。具体做法如下
// 截取base64的数据内容(去掉前面的描述信息,类似这样的一段data:image/png;base64,)并解码为2进制数据 var bstr = atob(imgUrl.split(',')[1]) // 获取解码后的二进制数据的长度,用于后面创建二进制数据容器 var n = bstr.length // 创建一个Uint8Array类型的数组以存放二进制数据 var u8arr = new Uint8Array(n) // 将二进制数据存入Uint8Array类型的数组中 while (n--) { u8arr[n] = bstr.charCodeAt(n) } // 创建blob对象 var blob = new Blob([u8arr]) // 调用浏览器的方法,调起IE的下载流程 window.navigator.msSaveOrOpenBlob(blob, 'chart-download' + '.' + 'png')
整体实现代码
// 这里是获取到的图片base64编码,这里只是个例子哈,要自行编码图片替换这里才能测试看到效果 const imgUrl = 'data:image/png;base64,...' // 如果浏览器支持msSaveOrOpenBlob方法(也就是使用IE浏览器的时候),那么调用该方法去下载图片 if (window.navigator.msSaveOrOpenBlob) { var bstr = atob(imgUrl.split(',')[1]) var n = bstr.length var u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } var blob = new Blob([u8arr]) window.navigator.msSaveOrOpenBlob(blob, 'chart-download' + '.' + 'png') } else { // 这里就按照chrome等新版浏览器来处理 const a = document.createElement('a') a.href = imgUrl a.setAttribute('download', 'chart-download') a.click() }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
上一篇:微信小程序框架wepy之动态控制类名
下一篇:react 国际化的实现代码示例
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程