前台html代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <div class="col-xs-11 post-control"> <button class="btn btn-primary" id="userSavePic" type="button" οnclick="savePiceture()"><i class="fa fa-save"></i>二维码下载</button> </div> <script type="text/javascript"> function savePiceture(){ console.log("1"); var url ="/areaExt/downloadQrCode"; window.open("<%=request.getContextPath()%>/areaExt/downloadQrCode"); } </script> |
后端Java代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | @RequestMapping("/downloadQrCode") @ResponseBody public void dowanload(HttpServletRequest request,HttpServletResponse response) throws Exception { //生成图片二维码======================================== String imgStr = qrService.createQrCode(webSite+"esc/index?zmbh="+1+"&v="+System.currentTimeMillis()); BASE64Decoder decoder = new BASE64Decoder(); InputStream input = new ByteArrayInputStream(decoder.decodeBuffer(imgStr)); Image src = ImageIO.read(input); int width = src.getWidth(null); int height = src.getHeight(null); BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.drawImage(src, 0, 0, width, height, null); g.dispose(); //===================================================== //步骤一:BufferedImage 转 InputStream ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ImageOutputStream imageOutput = ImageIO.createImageOutputStream(byteArrayOutputStream); ImageIO.write(image, "png", imageOutput); InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); //步骤二:获得文件长度 long length = imageOutput.length(); try { // 文件名 String fileName = "二维码信息-" + TimeUtil.getTime(TimeUtil.getNow(), "yyyy-MM-dd")+".png"; //设置文件长度 response.setContentLength((int)length); //步骤三:传入文件名、输入流、响应 fileDownload(fileName,inputStream,response); } catch (Exception e) { e.printStackTrace(); } } |
工具类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //文件下载方法,工具类 public static void fileDownload(String filename, InputStream input, HttpServletResponse response){ try { byte[] buffer = new byte[input.available()]; input.read(buffer); input.close(); // 清空response response.reset(); // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("utf-8"), "ISO-8859-1")); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); //关闭,即下载 toClient.close(); }catch (Exception e){ e.printStackTrace(); } } |