layUI实现文件下载

文章介绍了如何利用layui框架,结合JavaScript的XMLHttpRequest对象和Blob处理,实现文件下载的功能。通过监听table工具事件,触发下载、编辑和删除操作,重点展示了文件下载的详细代码实现,包括设置请求头、处理响应以及创建下载链接等步骤。
摘要由CSDN通过智能技术生成

1. 需求:使用layui来实现文件下载是一个常见的需求,今天我们就来实现一下

2. 代码实现如下

HTML部分
<div class="layui-body">
        <!-- table主体区域 -->
        <table class="layui-hide" id="test" lay-filter="test"></table>
 		
		<div style="margin-top: 40px" align="center">
        <button id="downLoad" class="layui-btn layui-btn-xs" onclick="downLoad()">  模板下载</button>
		</div>
        <script type="text/html" id="toolbarDemo">
            <div class="layui-btn-container">
                <h3>文件列表</h3>
            </div>
        </script>
 
        <script type="text/html" id="barDemo">
            <a class="layui-btn layui-btn-xs"  lay-event="download">下载</a>
            <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
            <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
        </script>
</div>

JS内容部分

// 通用工具类
    function downLoad() {
        var curWwwPath = window.document.location.href;
        var pathName = window.document.location.pathname;
        var pos = curWwwPath.indexOf(pathName);
        var localhostPath = curWwwPath.substring(0, pos);
        var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);
        var url = localhostPath + projectName + "/xxTemplate/xxx.xls";
        window.open(url);
    }
// 主要下载部分实现代码
layui.use('table', function () {
        var table = layui.table;
 
        //监听行工具事件
        table.on('tool(test)', function (obj) {
            var data = obj.data;
            if (obj.event === 'edit') {
                layer.msg('功能待开发');
            }
            else if (obj.event === 'download') {
                // 获取XMLHttpRequest
                var xmlResquest = new XMLHttpRequest();
                //  发起请求
                xmlResquest.open("POST", ctxPath + "xxController/download", true);
                // 设置请求头类型
                xmlResquest.setRequestHeader("Content-type", "application/json");
                xmlResquest.setRequestHeader("id",data.id);
                xmlResquest.responseType = "blob";
                //  返回
                xmlResquest.onload = function(oEvent) {
                    //alert(this.status);
                    var content = xmlResquest.response;
                    // 组装a标签
                    var elink = document.createElement("a");
 
                    //获取文件格式,截取文件后缀
                    var fileaddr = data.fileAddress;
                    var index = fileaddr.lastIndexOf(".");
                    var length  =fileaddr.length;
                    var laterName = fileaddr.substring(index,length);
                    //拼接下载的文件名
                    var newFileName = data.fileName+laterName;
                    //设置文件下载路径
                    elink.download = newFileName;
                    elink.style.display = "none";
                    var blob = new Blob([content]);
 
                    //解决下载不存在文件的问题,根据blob大小判断
                    if(blob.size==0){
                        layer.msg('服务器没找到此文件,请联系管理员!');
                    }else{
                        elink.href = URL.createObjectURL(blob);
                        document.body.appendChild(elink);
                        elink.click();
                        document.body.removeChild(elink);
                    }
                };
                xmlResquest.send();
            }
        });
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ifHappyEveryDay@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值