本文中下载的是二维码图片,生成二维码部分可参考博客中之前的文章点击打开链接
1、Controller中添加以下方法
@GetMapping(name="打包下载二维码",value="/down.jhtml")
public void downloadQRCode(HttpServletRequest request,HttpServletResponse response){
try {
String zipName="下载二维码.zip";
String header = request.getHeader("User-Agent").toUpperCase();
if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE") || header.contains("like Gecko")) {
zipName = URLEncoder.encode(zipName, "utf-8");
zipName = zipName.replace("+", "%20"); //IE下载文件名空格变+号问题
} else {
zipName = new String(zipName.getBytes(), "ISO8859-1");
}
//文件下载,指定默认的名称
//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开
response.setHeader("Content-Disposition", "attachment; filename=\"" + zipName + "\"");
//应用程序字节流
response.setContentType("APPLICATION/OCTET-STREAM");
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
for(int i=0;i<4;i++){
BufferedImage bufferImage = QRCode.createImage("QRCode for="+i, "", true);
zipOut.putNextEntry(new ZipEntry("二维码"+i+".png"));
ImageIO.write(bufferImage, "png", zipOut);
zipOut.closeEntry();
}
//加上下面可避免压缩文件的“不可预料的压缩文件末端”错误
zipOut.close();
//zipOut.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
2、测试访问
<a href="/down.jhtml>下载</html>
3、测试
浏览器弹出框 单击“确定”即可下载压缩包
扩展:
多参数,jQuery Ajax下载文件,向controller提交form.
JQuery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。但可以用js生成一个form,用这个form提交参数,并返回“流”类型的数据。在实现过程中,页面也没有进行刷新。
类似下图这样根据多条件下载
相关参考:http://blog.csdn.net/feichexia/article/details/7105741
http://www.cnblogs.com/nuccch/p/7151228