前端实现文件下载

/**
 * Javascript 多文件下载
 * @author Barret Lee
 * @email  [email protected]
 */
var Downer = (function(files){
    var h5Down = !/Trident|MSIE/.test(navigator.userAgent);
    // try{
    //     h5Down = document.createElement("a").hasOwnProperty("download");
    // } catch(e){
    //     h5Down = document.createElement("a").download;
    // }

    /**
     * 在支持 download 属性的情况下使用该方法进行单个文件下载
     * 目前 FF 还不支持 download 属性,所以 FF 必须另觅他法!
     * @param  {String} fileName
     * @param  {String|FileObject} contentOrPath
     * @return {Null}
     */
    function downloadFile(fileName, contentOrPath){
        var aLink = document.createElement("a"),
            evt = document.createEvent("HTMLEvents"),
            isData = contentOrPath.slice(0, 5) === "data:",
            isPath = contentOrPath.lastIndexOf(".") > -1;

        // 初始化点击事件
        // 注:initEvent 不加后两个参数在FF下会报错
        evt.initEvent("click",false,false);

        // 添加文件下载名
        aLink.download = fileName;

        // 如果是 path 或者 dataURL 直接赋值
        // 如果是 file 或者其他内容,使用 Blob 转换
        aLink.href = isPath || isData ? contentOrPath
                    : URL.createObjectURL(new Blob([contentOrPath]));

        aLink.dispatchEvent(evt);
    }

    /**
     * [IEdownloadFile description]
     * @param  {String} fileName
     * @param  {String|FileObject} contentOrPath
     */
    function IEdownloadFile(fileName, contentOrPath, bool){
        var isImg = contentOrPath.slice(0, 10) === "data:image",
            ifr = document.createElement(‘iframe‘);

        ifr.style.display = ‘none‘;
        ifr.src = contentOrPath;

        document.body.appendChild(ifr);

        // dataURL 的情况
        isImg && ifr.contentWindow.document.write("<img src=‘" +
                contentOrPath + "‘ />");

        // 保存页面 -> 保存文件
        // alert(ifr.contentWindow.document.body.innerHTML)
        if(bool){
            ifr.contentWindow.document.execCommand(‘SaveAs‘, false, fileName);
            document.body.removeChild(ifr);
        } else {
            setTimeout(function(){
                ifr.contentWindow.document.execCommand(‘SaveAs‘, false, fileName);
                document.body.removeChild(ifr);
            }, 0);
        }
    }

    /**
     * [parseURL description]
     * @param  {String} str [description]
     * @return {String}     [description]
     */
    function parseURL(str){
        return str.lastIndexOf("/") > -1 ? str.slice(str.lastIndexOf("/") + 1) : str;
    }

    return function(files){
        // 选择下载函数
        var downer = h5Down ? downloadFile : IEdownloadFile;

        // 判断类型,处理下载文件名
        if(files instanceof Array) {
            for(var i = 0, l = files.length; i < l ; i++)
                // bug 处理
                downer(parseURL(files[i]), files[i], true);
        } else if(typeof files === "string") {
            downer(parseURL(files), files);
        } else {
            // 对象
            for(var file in files) downer(file, files[file]);
        }
    }

})();

上面是代码直接引入即可

通过某一事件触发后,直接调用

Downer("../file/test.txt");//Downer(url);原文地址:http://www.cnblogs.com/hustskyking/p/multiple-download-with-javascript.html
时间: 2024-12-17 17:39:56

前端实现文件下载的相关文章

前端数据流文件下载三种方式

1.直接使用get请求方式进行下载: window.open(`${url}?${qs.stringify(param)}`, '_blank'); 2.使用form 表单post请求进行下载: const postDownloadFile = (action, param) => { const form = document.createElement('form'); form.action = action; form.method = 'post'; form.target = 'bl

前端:文件下载功能

需求:页面上有一个下载按钮,点击后实行文件下载功能. var exportURL = "/moduleName/rest/exportdata?startDate=" + startDate + "&endDate=" + endDate; console.log(exportURL); ajaxWrapper(exportURL, function () { window.open(exportURL, "_blank");//打开一个

前端实现文件下载功能

在很多后台管理系统里可能会有导出表格,下载表格,下载压缩包等这样的需求.下面说几种简单的下载的方法: 1.最简单的,有文件的地址,直接使用a标签实现下载(通用模板前端本地下载):     <a href="/user/test/xxxx.xls" download="文件名.xls">点击下载</a>   但是有个情况,比如txt,png,jpg等这些浏览器支持直接打开的文件是不会执行下载任务的,而是会直接打开文件,这个时候就需要给a标签添加

前端实现文件下载的功能

1.第一种方法:downFile(下载地址, 保存名称); function downFile(content, filename) { // 创建隐藏的可下载链接 var eleLink = document.createElement('a'); eleLink.download = filename; eleLink.style.display = 'none'; // 字符内容转变成blob地址 var blob = new Blob([content]); eleLink.href =

文件下载在前端显示乱码的问题

最近在帮老师写一个文件上传下载的项目,遇到文件下载的文件名乱码的问题: 解决办法如下: response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));  用URLEncoder将文件名编码

PHP + NGINX 控制视频文件播放,并防止文件下载

最简单的方法是使用NGINX的 internal 功能 server {    listen 80;    server_name www.xxx.com;     location / {        index index.php index.html index.htm;        root  /xxx; if (!-e $request_filename) {         rewrite ^/index.php(.*)$ /index.php?s=$1 last;      

web前端开发规范

本文原创,这里首先声明,转载注明本文出处,翻版必究! web前端开发规范的现实意义 1.提高团队的协作能力 2.提高代码的重复利用率 3.可以写出质量更高,效率更好的代码 4.为后期维护提供更好的支持 5.可读性高 一.命名规则 1.html命名规则: a.文件名称命名规则:统一使用小写英文字母.数字.下划线的组合,不得包含汉字空格和特殊字符 2.命名原则:方便理解.方便查找 b.索引文件命名原则:index.html.index.htm.index.asp.index.aspx.index.j

性能测试(六)前端性能优化方法

日常工作和生活中,我们经常利用浏览器去打开一些URL来获取我们所需的资源,那么作为一个开发者或者性能测试工程师,如何去测试并提升优化前端的性能呢? 一.浏览器打开URL和方式和过程 不同浏览器工作方式不完全一样,大体来讲,浏览器的核心是浏览器引擎:不同浏览器对W3C的规范支持不尽相同,在具体功能的实现上也不完全一致. 1.连接到URL所在的服务器 用户在浏览器地址栏输入URL,打开URL时,浏览器首先寻找该URL所在的服务器.通过向DNS服务器查询,获取该URL所在网站的IP地址,然后浏览器向该

文件下载与文件对比

首先说一下前端代码如何实现文件下载: <a href="Template.xlsx">模板文件下载</a> 有些文件,比如exe,xls,zip文件等,浏览器会弹出保存文件的提示框:有些文件如txt,img文件等,浏览器则是直接打开,各种浏览器对其处理的方式也有不同. C#后台实现文件下载的代码 1 protected void btnDown_Click(object sender, EventArgs e) 2 { 3 string filename = S