js 下载Base64格式数据图片(兼容主流浏览器)
来源:互联网 发布:ubuntu安装apache2 php 编辑:程序博客网 时间:2024/06/05 04:32
最近的工作内容和前端有关。需要做一个图片下载的功能,然而后台只提供了byte[] 类型的图片数据,并且返回给前端的是Base64格式图片数据。那么,就遇到了最严重的问题了:浏览器兼容。
展示图片的时候,各个浏览器大家都一样,都可以这样来
<img src="data:image/jpeg;base64,/.....="/>
然而,在提供下载的时候,总有人要搞事情(说的就是你啦——IE)。在经过多方搜索,解决了这个麻烦。
感谢这几个帖子的引导:
http://www.imooc.com/article/16403?block_id=tuijian_wz 慕课网的这篇博客,帮助我建立了最初的下载结构,后续我已经测试修改了里面关于对浏览器的判断。
https://segmentfault.com/q/1010000005816241 segmentfault的这篇问答,帮助我找到了Base64转Blob的方法。
http://www.cnblogs.com/huxdiy/p/6124208.html cnblogs的这篇博客,提供了兼容IE浏览器下载功能的方案。
注:本人是windows系统,测试的safari不能下载,手机(UC浏览器)不能下载。
下面是是我综合后的代码:
点击a标签后,会调用 oDownLoad(url) 这个方法,其中 url 是Base64格式的图片数据。
function oDownLoad(url) { console.log(myBrowser()); if (myBrowser() === "IE") { //IE //|| myBrowser() === "Edge" odownLoad.href = "#"; // SaveAs5(url); downloadFile("下载.jpg", url); } else { //!IE var blob = base64Img2Blob(url); url = window.URL.createObjectURL(blob); odownLoad.href = url; odownLoad.download = ""; }}var odownLoad = null;$(function () {// id="download"是一个a标签 odownLoad = document.getElementById("downLoad"); odownLoad.onclick = function () { var src = $('.big_img').attr("src"); oDownLoad(src); }});
下一步会调用判断浏览器的方法 myBrowser() ,这里面的 if 的顺序都是经过我测试得到的。浏览器版本不同,标识符可能会不一样。除safari(windows版),opera不是最新浏览器外,其余均为最新版本浏览器(截止2017年3月2日)。
//判断浏览器类型 function myBrowser() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isOpera = userAgent.indexOf("OPR") > -1; if (isOpera) { return "Opera" }; //判断是否Opera浏览器 OPR/43.0.2442.991 //if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) { return "IE"; }; //判断是否IE浏览器 if (userAgent.indexOf("Firefox") > -1) { return "FF"; } //判断是否Firefox浏览器 Firefox/51.0 if (userAgent.indexOf("Trident") > -1) { return "IE"; } //判断是否IE浏览器 Trident/7.0; rv:11.0 if (userAgent.indexOf("Edge") > -1) { return "Edge"; } //判断是否Edge浏览器 Edge/14.14393 if (userAgent.indexOf("Chrome") > -1) { return "Chrome"; }// Chrome/56.0.2924.87 if (userAgent.indexOf("Safari") > -1) { return "Safari"; } //判断是否Safari浏览器 AppleWebKit/534.57.2 Version/5.1.7 Safari/534.57.2判断完毕后,针对非IE浏览器,创建一个Blob对象,然后再二进制化,就可以下载了。
var blob = base64Img2Blob(url); url = window.URL.createObjectURL(blob); odownLoad.href = url; odownLoad.download = "";针对IE浏览器,需要调用另外一个方法 downloadFile(fileName,content) 。创建Blob对象的方法是一样的,不同的是,IE浏览器不能用a标签的属性 a.download,而是要用IE浏览器自己的方法 window.navigator.msSaveBlob(blob,fileName) 。
//支持IE11function downloadFile(fileName, content) { var blob = base64Img2Blob(content); //支持IE11 window.navigator.msSaveBlob(blob, fileName);}这样,就完成了Base64格式数据图片的下载。
关于 safari浏览器的兼容测试,后续我找到 Mac设备以后,才可以修改了。
1 0
- js 下载Base64格式数据图片(兼容主流浏览器)
- js base64编码格式图片另存为下载
- js鼠标滑轮滚动事件绑定(兼容主流浏览器)
- JS复制到剪切板(兼容主流所有浏览器)
- 上传图片动态预览(兼容主流浏览器)
- js导出excel兼容各个主流浏览器
- 通过转成Blob文件下载base64图片(兼容IE)
- js无缝图片滚动代码,利用强大的JQUERY,兼容IE、火狐等主流浏览器
- 兼容IE8和主流浏览器的图片预览的js代码
- js实现图片转base64(兼容IE8+)
- 真正实现兼容IE6以上主流浏览器-上传图片预览
- html5 + jq 实现图片上传预览,兼容主流浏览器
- 禁止右键+禁止选择文本JS代码分享(兼容主流浏览器)
- audio.js兼容主流浏览器的音乐播放器
- JS实现文本复制功能,兼容主流浏览器
- JS日期选择器(兼容IE,Firefox,Opera等主流浏览器)
- JS日期选择器(兼容IE,Firefox,Opera等主流浏览器)
- js获取点击事件的位置,兼容主流浏览器
- Smack+Openfire搭建IM通信(Android 实现)
- 6.12、层次结构导航
- JAVA从入门到精通(10)-- 继承
- Spring Bean的生命周期(非常详细)
- mysql 安装问题小总结
- js 下载Base64格式数据图片(兼容主流浏览器)
- 根据环境变量配置,动态加载配置文件(区分开发环境,生成环境)
- java类加载流程
- 巧妙的利用Mongodb做地理空间查询
- HDU2476
- Array-Leetcode
- (转载)HTTP长连接和短连接
- 控制台程序中使用CString
- 学习layui之省市县三级联动