前端-打压缩包-下载

一、需求

mysql表中存储了可执行的脚本与执行后的报告两个字段,需要将这两个字段的内容写到两个文件中,并打成压缩包下载到本地。

二、实现

1、需要的js包:

使用jszip这个项目实现的: https://github.com/Stuk/jszip

压缩和未压缩的JS文件都在 dist目录下,大家自行下载。

2、引入js

<script src="./jszip.min.js"></script>

3、前端发送ajax请求,查询需要下载的文件内容并解析

function downloadZipFile(){
        var row = $('#dg').datagrid('getSelected');
        var requestFileName = row.requestFileName;
        var resultFileName = row.resultFileName;
        if (null != row) {
            $.ajax({
                url:"${basePath}/jmeterCaseExeLog/downloadZipScript?exeLogId="+row.id,
                dataType:"json",
                success:function (res) {
                    if (res.header.flag) {
                        var context = res.body;
                        var xmlData = JSON.parse(context);
                        var array = new Array();
                        array.push({fileName:requestFileName,content:xmlData.requestData});
                        array.push({fileName:resultFileName,content:xmlData.resultData});
                        //zip压缩包的文件名为当前执行记录id_jmx脚本名称
                        downloadZip(row.id+"_"+requestFileName,array);
                    } else {
                        Notify(res.header.msg, 'top-right', '5000', 'danger', 'fa-bolt', true);
                    }
                }
            });
        }
    }

4、java代码从mysql查询到数据包装后返回给前端

 @RequestMapping("downloadZipScript")
 @ResponseBody
 public Object downloadZipScript(HttpServletRequest request ,Integer exeLogId){
     try {
         TmpJmeterExeLogPo tmpJmeterExeLogPo = jmeterExeLogService.getById(exeLogId);
         String requestData = tmpJmeterExeLogPo.getRequestData();
         String resultData = tmpJmeterExeLogPo.getResultData();
         Map map = new HashMap();
         map.put("requestData",requestData);
         map.put("resultData",resultData);
         String xmlData = JSON.toJSONString(map);
         return success(xmlData);
     }catch (Exception e){
         return error("500","下载文件失败");
     }
 }

5、前端解析返回的结果,并打包下载

/**
 * 下载文件并打包成zip压缩包
 * @param zipName
 * @param arrayData
 */
function downloadZip(zipName,arrayData) {
    // arrayData是个数组
    // 数组项结构 {name: "xxx", content: "..."}
    var zip = new JSZip();
    arrayData.forEach(function (obj) {
        // zip包里面不断塞svg文件
        zip.file(obj.fileName, obj.content);
    });
    // 生成zip文件并下载
    zip.generateAsync({
        type: 'blob'
    }).then(function(content) {
        // 下载的文件名
        var filename = zipName + '.zip';
        // 创建隐藏的可下载链接
        var eleLink = document.createElement('a');
        eleLink.download = filename;
        eleLink.style.display = 'none';
        // 下载内容转变成blob地址
        eleLink.href = URL.createObjectURL(content);
        // 触发点击
        document.body.appendChild(eleLink);
        eleLink.click();
        // 然后移除
        document.body.removeChild(eleLink);
    });
}

三、参考博客

js实现zip打包并下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值