不保存批量生成二维码并压缩zip下载

对于我一个前端来说,做这个也是醉了;搜了好多都是对已有的文件打包下载的,这里自己组合了下;先看代码吧!

Controller方法(springMVC)

/**
	 * 二维码
	 * 
	 * @param code
	 * @param request
	 * @param response
	 */
	@ResponseBody
	@RequestMapping(value = "createCode", method = RequestMethod.GET)
	public void createCode(Integer size) {
		QRCodeWriter writer = new QRCodeWriter();
		getResponse().setHeader("Pragma", "No-cache");
		getResponse().setHeader("Cache-Control", "no-cache");
		getResponse().setDateHeader("Expires", 0);
		getResponse().setContentType("application/zip");
		List<BufferedImage> buffImgs = new ArrayList<BufferedImage>();
		BitMatrix bitMatrix = null;
		try {
			for (int j = 1; j < 10; j++) {
				bitMatrix = writer.encode(
						Property.getProperty("system.qrcodeURL"),
						BarcodeFormat.QR_CODE, size, size);
				BufferedImage buffImg = MatrixToImageWriter
						.toBufferedImage(bitMatrix);
				Graphics g = buffImg.getGraphics();
				g.setColor(Color.red);
				// 最后一个参数用来设置字体的大小
				Font f = new Font("宋体", Font.BOLD, 20);
				g.setFont(f);
				// 10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
				g.drawString("箱" + j, 10, 30);
				g.dispose();

				buffImgs.add(buffImg);
			}
			ZipOutputStream zos = new ZipOutputStream(getResponse()
					.getOutputStream());
			int i = 1;
			for (BufferedImage buf : buffImgs) {
				ZipEntry entry = new ZipEntry("箱" + i + ".jpeg");
				// 设置压缩包的入口
				zos.putNextEntry(entry);
				JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(zos);
				en.encode(buf);
				zos.flush();
				i++;
			}
			zos.close();
			// MatrixToImageWriter.writeToStream(bitMatrix, "jpeg",
			// getResponse()
			// .getOutputStream());
			getResponse().getOutputStream().flush();
			getResponse().getOutputStream().close();
		} catch (WriterException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

网页前端JS

这里需要做兼容处理,IE内核支持iframe请求触发下载;但是火狐和谷歌可以使用a标签h5的download属性
<pre name="code" class="javascript">                                       function DoSaveAsIMG() {  
                                          if (document.all.IframeReportImg.src != "about:blank")  
    	                                      window.frames['IframeReportImg'].document.execCommand("SaveAs");          
                                       } 
 
 
                                        var _size=$("#qrcode").val();
                                        var b_name = navigator.appName;
					if (b_name == "Microsoft Internet Explorer") {
					    //如果隐藏IFRAME不存在,则添加  
				        if (!document.getElementById("IframeReportImg"))  
				            $('<iframe style="display:none;" id="IframeReportImg" name="IframeReportImg" οnlοad="DoSaveAsIMG();" width="0" height="0" src="about:blank"></iframe>').appendTo("body");  
				        if (document.all.IframeReportImg.src != opts.createQRCodeURL+"?size="+_size) {  
				            //加载图片  
				            document.all.IframeReportImg.src = opts.createQRCodeURL+"?size="+_size;  
				        }  
				        else {  
				            //图片直接另存为  
				            DoSaveAsIMG();    
				        }  
					}else{
						 var newA = document.createElement("a");
						 newA.download = "code";
						 newA.href = opts.createQRCodeURL+"?size="+_size;
						 document.body.appendChild(newA);
						 newA.click();
						 document.body.removeChild(newA);
					}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值