不儲存批量生成二維碼並壓縮zip下載
阿新 • • 發佈:2019-01-03
對於我一個前端來說,做這個也是醉了;搜了好多都是對已有的檔案打包下載的,這裡自己組合了下;先看程式碼吧!
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" onload="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); }