年前一直忙着项目现场实施,没时间整理,今天终于得空开始整理。
做wms系统经常会遇到导出各种类型的库存单,此时就可以在后台将这些整合压缩到一个压缩包内然后再下载压缩包,一个接口就可以完成的事。
思路一:将生成的多个文件先逐个存到本地一个临时的文件夹内并压缩,获取压缩文件下载,下载完以后删除该临时文件夹和内部文件 思路二:所有都在内存中实现,将生成的多洪辰唱过的歌个文件的输出流转换成为byte数组塞入压缩包的输出流中,最后下载该压缩包
第一个思路虽然操作复杂慢性病防治,但是却很容易想到的。
第二个思路,所有文件流都放在内存中操作,操作大大的简便了。本文将要讲述的就是此种方式。
controller层:
//思路二:所有都在内存中实现,将生成的多个文件的输出流转换成为byte数组塞入压缩包的输出流中,最后下载该压缩包 @requestmapping("/zip/download2") public void downloadzip2(string name, httprvletrespon httprespon) { documentrvice.downloadreport(name, httprespon); }
rvice层:
public void downloadreport(string name, httprvletrespon httprespon){ //使用easyexcel生成excel表1 ma立面图p excelout = exportexcel(name); //使用easyexcel生成excel表2(同上) map excelout2 = exportexcel2(name); //将要压缩的文件塞到一个list里面 list<map> filelist = new arraylist(); filelist.add(excelout); filelist.add(excelout2); //压缩多个文件并下载 zipfiles(filelist,httprespon); }
要养成一个良好的习惯,当一个方法中的代码量过于臃肿时候,要抽出来一部分生成一个新的方法来给调用。
//生成excel表格导出到本地 public map exportexcel(string name) { list<ur> urlist = urdao.queryursbyname(name); try (bytearrayoutputstream out = new bytearrayoutputstream()) { //使用easyexcel导出excel string excelfilename = "根据人名查询数据.xlsx"; excelwriter writer = new excelwriter(out, exceltypeenum.xlsx, true); sheet sheet = new sheet(1, 0, ur.class); //设置自适应宽度 sheet.tautowidth(boolean.true); writer.write(urlist, sheet); writer.finish(); map excelout = new hashmap(); excelout.put("filename",excelfilename); 传家宝作文 excelout.put("outbyte",out.tobytearray()); return excelout; } catch (exception e) { log.error(e.getmessage(), e); } return null; }
//多个文件压缩成压缩包并下载 public void zipfiles(list<map> filelist,httprvletrespon httprespon) { try(zipoutputstream zipoutputstream = new zipoutputstream(httprespon.getoutputstream()); outputstream out =null) { //下载压缩包 httprespon.tcontenttype("application/zip"); httprespon.theader("content-disposition", "attachment;filename=" + urlencoder.encode("附件.zip", "utf-8")); // 创建 zipentry 对象 for (map map:filelist){ zipentry zipentry = new zipentry((string) map.get("filename")); zipoutputstream.putnextentry(zipentry); zipoutputstream.write((byte[]) map.get("outbyte")); } } catch (ioexception e) { log.error(e.getmessage(), e); 剖面图符号 } }
dao层就是简单的一个sql语句根据用户名称查询用户数据
如此便完成了多文件压缩并下载的功能,如下。
当然,思路一虽然复杂,但是对于新手同学我还是建议把思路一自己实现一下,其中对于文件io的一些操作将会让你更加容易理解并吸收。
到此这篇关于java多文件生成并压缩下载的文章就介绍到这了,更多相关java多文件压缩下载内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-05 01:00:38,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/58ba98520dab846e3f39ef28817a83c0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java多文件生成并压缩下载功能(思路详解).doc
本文 PDF 下载地址:Java多文件生成并压缩下载功能(思路详解).pdf
留言与评论(共有 0 条评论) |