java实现从服务器把多附件打成zip包并下载至本地,下载路径为浏览器的默认下载路径。
下面为下载zip压缩包相关流程 :
1、找到服务器文件的存放位置,并确保文件存在
2、创建临时文件夹(临时zip 文档存放位置)
3、将多附件压缩成zip包,存放在临时文件夹内(可设置zip压缩包以及包内文件名称)
4、设置response 的 header
5、下载zip 压缩包
6、删除临时文件
温馨提示:
下载附件到本地不能返回json 字符串,可以无返回值或者返回String类型。
前端
前端新增一件导出按钮
<body class="childrenBody">
<form class="layui-form">
<div class="layui-form-item">
<div class="layui-input-inline" style="width:100%;padding-top:10px;">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="exportfiles">导出全部附件</button>
</div>
</div>
</form>
<script>
var flag_recome = 0;
layui.use(['form', 'jquery', 'layer', 'laydate', 'upload', 'element'], function () {
var form = layui.form,
$ = layui.jquery,
laydate = layui.laydate,
element = layui.element,
layer = layui.layer,
upload = layui.upload;
element.render();
// 点击一键导出butten 触发事件
form.on("submit(exportfiles)",function(data){
// 异步前开启加载效果,
var loadIndex = layer.load(2, {
shade: [0.3, '#333'] // 0.3透明度的白色背景
});
var url = "exportfiles?id="+data.field.id;
console.log(url);
// 动态构造了一个form ,并提交。
$('<form method="post" action="' + url + '"></form>').appendTo('body').submit().remove();
// 异步完成后关闭加载效果
layer.close(loadIndex);
return false;
});
});
</script>
</body>
后端代码实现:
//在application.yml 配置文件中配置临时zip文件的存放路径
#自定义参数
myconfig:
istest: 1
zipPath: c:/下载/
# zipPath: /usr/project/changying/file/
//引入自定义参数
@Value("${myconfig.zipPath}")
private String zipPath;
//下载zip 压缩包到本地
@RequiresPermissions("admin:return:edit")
@PostMapping("exportfiles")
@ResponseBody
public void exportfiles(@RequestParam("id") String id,HttpServletResponse response){
try {
CaseList data=caseService.getModelById(Long.parseLong(id));
/*1、获取文件*/
EntityWrapper<CaseFile> wrapper = new EntityWrapper<