图片的生成 显示 打包下载

// 根据路径打包下载图片

 

 

publicvoidresponseImage(RoomCode[] roomCode, HttpServletResponse response) {

      ZipOutputStreamzos= null;

      InputStreamfis= null;

      try {

         // 文件的名称

         StringdownloadFilename= System.currentTimeMillis() + ".zip";

         // 转换中文否则可能会产生乱码

         downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");

         response.reset();

         // 指明response的返回对象是文件流

         response.setContentType("application/octet-stream");

         // 设置在下载框默认显示的文件名

         response.setHeader("Content-Disposition","attachment;filename=" + downloadFilename);

         zos = new ZipOutputStream(response.getOutputStream());

         for (inti = 0; i < roomCode.length; i++) {

            if(org.apache.commons.lang3.StringUtils.isNoneBlank(roomCode[i].getUrl())) {

                URLurl= newURL(imgUrl+ roomCode[i].getUrl());

                zos.putNextEntry(new ZipEntry(roomCode[i].getRoomNum() + ".jpg"));

                fis = url.openConnection().getInputStream();

                byte[] buffer = newbyte[1024];

                intr = 0;

                while ((r = fis.read(buffer)) != -1) {

                   zos.write(buffer, 0, r);

                }

                fis.close();

            }

         }

         zos.flush();

         zos.close();

      }catch(UnsupportedEncodingException e) {

         logger.error("二维码下载失败!!");

         e.printStackTrace();

      }catch(IOException e) {

         logger.error("二维码下载失败!!");

         e.printStackTrace();

      }finally{

         if (fis != null) {

            try {

                fis.close();

            }catch(Exception e2) {

                e2.printStackTrace();

            }

         }

         if (zos != null) {

            try {

                zos.close();

            }catch(Exception e2) {

                e2.printStackTrace();

            }

         }

 

      }

   }

 

 

// 直接生成图片 然后打包下载

publicstaticvoidgetBarCodeImgByUrl(String url, intwidth,intheight,String format, OutputStream os)

         throws WriterException,IOException {

      Map<EncodeHintType,Object> hints= newHashMap<EncodeHintType, Object>();

      hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");

      BitMatrixbitMatrix;

      bitMatrix = newMultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width,height,hints);

      MatrixToImageWriter.writeToStream(bitMatrix, format, os);

   }

 

publicstaticvoidwriteToStream(BitMatrix matrix, String format,OutputStream stream)throwsIOException {

      BufferedImageimage= toBufferedImage(matrix);

      if (!ImageIO.write(image, format, stream)) {

         thrownew IOException("Could not write an image of format " + format);

      }

   }

 

publicvoiddownload(HttpServletRequest request, HttpServletResponse response, String identy){

 

      // 通过活动标识和商户id查询活动

 

      ZipOutputStreamzos= null;

      try {

         StringdownloadFilename= URLEncoder.encode("房间二维码下载", "UTF-8");// 转换中文否则可能会产生乱码

         response.setContentType("application/octet-stream");// 指明response的返回对象是文件流

         response.setHeader("Content-Disposition","attachment;filename=" + downloadFilename+ ".zip");// 设置在下载框默认显示的文件名

         zos = new ZipOutputStream(response.getOutputStream());

         for (inti = 0; i < 20; i++) {

            zos.putNextEntry(new ZipEntry(System.currentTimeMillis()+ ".jpg"));// 命名

            CodeUtil.getBarCodeImgByUrl("http://1243.com"+ i, 300, 300, "jpg", zos);// 拼接了url

         }

 

         zos.flush();

         zos.close();

      }catch(UnsupportedEncodingException e) {

         e.printStackTrace();

      }catch(IOException e) {

         e.printStackTrace();

      }catch(WriterException e){

         e.printStackTrace();

      }finally{

         if (zos != null) {

            try {

                zos.flush();

                zos.close();

            }catch(IOException e) {

                e.printStackTrace();

            }

 

         }

 

      }

 

   }

 

图片验证码的生成和显示

前端

<div class="col-sm-8" >

                <img src="" id="codeImage">

                </div>

 

<script th:inline="javascript">

   varid = [[${roomInfoId}]];

   $(function(){

      $("#codeImage").attr("src","/system/room/show/"+id);

   })

  

</script>

 

后端

@GetMapping("/show/{id}")

   publicvoid show(@PathVariable("id") String id, HttpServletResponse response, HttpServletRequest request) {

      response.setContentType("image/jpeg");// 设置相应类型,告诉浏览器输出的内容为图片

      response.setHeader("Pragma","No-cache");// 设置响应头信息,告诉浏览器不要缓存此内容

      response.setHeader("Cache-Control","no-cache");

      response.setHeader("Set-Cookie","name=value; HttpOnly");// 设置HttpOnly属性,防止Xss攻击

      response.setDateHeader("Expire",0);

      roomInfoService.showCode(request, response, id);

 

   }

 

@Override

   publicvoid showCode(HttpServletRequest request, HttpServletResponse response, String id) {

      // 根据id 生成二维码路径

      try {

         BufferedImageimage= CodeUtil.qRCodeImage(getUrlById(id), WIDTH, HIGH, Constant.PIC_SUFFIX);

         ByteArrayOutputStreamtmp= newByteArrayOutputStream();

         ImageIO.write(image, Constant.PIC_SUFFIX, tmp);

         tmp.close();

         IntegercontentLength= tmp.size();

         response.setHeader("content-length",contentLength+ "");

         response.getOutputStream().write(tmp.toByteArray());

      }catch(Exception e) {

         e.printStackTrace();

      }

   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值