Java后台生成图片,前台实现图片下载

前台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();
        }
    }