一、需求
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
});
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、前端解析返回的结果,并打包下载
function downloadZip(zipName
,arrayData
) {
var zip
= new JSZip();
arrayData
.forEach(function (obj
) {
zip
.file(obj
.fileName
, obj
.content
);
});
zip
.generateAsync({
type
: 'blob'
}).then(function(content
) {
var filename
= zipName
+ '.zip';
var eleLink
= document
.createElement('a');
eleLink
.download
= filename
;
eleLink
.style
.display
= 'none';
eleLink
.href
= URL.createObjectURL(content
);
document
.body
.appendChild(eleLink
);
eleLink
.click();
document
.body
.removeChild(eleLink
);
});
}
三、参考博客
js实现zip打包并下载