js文件下载及命名

巴扎黑
巴扎黑 原创
2017-06-26 15:03:58 1523浏览
js文件下载 ; 文件下载方法 ; IE中文件下载的方法 ; 使用IE下载 ; 文件下载兼容性 ; a标签下载 ; 浏览器下载

函数功能:实现主流浏览器的文件下载功能;

兼容性: >=IE10,Edge,chrome,firefox;

与后台的请求方式:GET请求, url携带参数 url?id=123(隐藏文件真实路径);

实现下载功能的前提是判断出浏览器类型:

       browserType: function(){var userAgent = navigator.userAgent.toLowerCase();// Figure out what browser is being usedvar testCenter = {
                ie:function isIE() { //ie?if (!!window.ActiveXObject || "ActiveXObject" in window)return true;elsereturn false;
                },
                edge : ()=>{ return /dge/.test(userAgent) },
                chrome:()=>{ return /chrome/.test(userAgent)},
                safari: ()=>{  return /safari/.test(userAgent)&&!(/chrome/.test(userAgent))},
                opera: ()=>{  return  /opera/.test(userAgent) } ,
                msie: ()=>{  return /msie/.test(userAgent) && !/opera/.test(userAgent) },
                mozilla: ()=>{  return /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) }
            };var browserObj = {};for(var k in testCenter){var result = testCenter[k]();var version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1];if(result){
                    browserObj.browser = k;
                    browserObj.version = version;return browserObj;
                }
            }
        },
View Code

下载函数定义:如下

dlFile : function(options) {var that = this;var url = options.url;
            url += "?" + $.param(options.data);   //这里也可以不用jqvar xhr = new XMLHttpRequest();        //发起请求xhr.open('get', url);
            xhr.responseType = 'blob';        //规定响应为流文件            xhr.send();
            xhr.onreadystatechange = function(){if (this.readyState == 4){if (this.status == '401' || this.status == '402') {                                     //在这里可以进行一些请求失败的处理                    }else if(this.status == 200) {var currentBrowserType = that.browserType();  //判断浏览器类型  见上述browserType函数;if(currentBrowserType.browser==='ie'&&(currentBrowserType.version == "10.0" || currentBrowserType.version == "11.0")){   //如果IE创建iframe对象来下载var href = window.URL.createObjectURL(this.response);var elemIF = document.createElement("iframe");
                                elemIF.src = "http://" + location.host + '/crowd-web/file/downloadFile?' + $.param(options.data);
                                elemIF.style.display = "none";
                                document.body.appendChild(elemIF);
                          }else if( currentBrowserType.browser==='edge'){ //如果edge使用h5的a标签的下载功能实现if (this.getResponseHeader("content-disposition")) {var fileName = decodeURI(this.getResponseHeader("content-disposition").replace("attachment;filename=", ""));
                                }var href = "http://" + location.host + '/crowd-web/file/downloadFile?' + $.param(options.data);var $dllink = $('<a href="' + href + '" download="' + fileName + '" ></a>').appendTo(document.body);
                                $dllink[0].click();
                                 window.URL.revokeObjectURL(href);
                        } else {  //其他现代浏览器采用H5的a标签新特性实现var href = window.URL.createObjectURL(this.response);if (this.getResponseHeader("content-disposition")) {var fileName = decodeURI(this.getResponseHeader("content-disposition").replace("attachment;filename=", ""));
                                }var $dllink = $('<a href="' + href + '" download="' + fileName + '" ></a>').appendTo(document.body);                             //initMouseEvent已经被放弃,直接使用a标签的dom节点click功能触发点击//var event = document.createEvent("MouseEvents");//event.initMouseEvent(//    "click", true, false, window, 0, 0, 0, 0, 0//    , false, false, false, false, 0, null//);//$dllink[0].dispatchEvent(event);$dllink[0].click();

                            window.URL.revokeObjectURL(href); //告诉浏览器可以释放该路径                        }
                    }
                }
            };
        },
View Code

下载函数调用:如下

(以上方法均定义在全局对象tools中,也可以写成自己需要的方式)

 tools.dlFile({
                    data : {"fileId":item.id},
                    url :config.URL.downLoad,
                    contentType : "application/json;chartset=utf-8",
                })
View Code

相关知识点:

文件下载的最佳方法选用:博文;

使用H5 a标签的新特性:博文;

Blob对象及createObjectURL 和revokeObjectURL方法 : 博文;

提问:

a标签模拟click事件: 你猜如下代码能触发页面调转吗?

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"></head><body><a href="http://www.baidu.com" id="hehe">百度</a><button>跳到百度</button><script src="bower_components/jquery/dist/jquery.js?1.1.11"></script><script>$("button").click(function(){
         alert(123)
         $("#hehe").click();
    })</script></body></html>
View Code

以上就是js文件下载及命名的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。