生成二維碼,掃碼跳轉連接


首先前台使用的是vue,用到的生成二維碼工具類ZxingUtil

 <a v-bind:href="'${ctx}/admin/activity/activityDetailQRCode.do?recno='+item.recno"
                                               class="btn btn-danger btn-xs" v-bind:download="item.name+'.jpg'"
                                               style="padding:1px 5px;font-size: 14px;margin-top: 5px">下載活動報名二維碼</a>

后台

 //生成活動報名二維碼
    @RequestMapping("activityDetailQRCode")
    @ResponseBody
    public void activityDetailQRCode(HttpServletRequest request,HttpServletResponse response,Integer recno){
        String realPath = request.getServletContext().getRealPath("/");
        File dir = new File(realPath+File.separator+"activityDetailQRCode");
        if(!dir.exists()){
            dir.mkdir();
        }

        String activityQrcodeLink = dir.getAbsolutePath() + File.separator  + recno + ".jpg";
        File file = new File(activityQrcodeLink);
        if (!file.exists()) {
            try {
                file.createNewFile();
                //獲取網絡協議
                String networkProtocol = request.getScheme();
                //網絡IP
                String ip = request.getServerName();
                //端口號
                int port = request.getServerPort();
                //項目發布路徑
                String webApp = request.getContextPath();
                //url:${ctx}/mobile/activity/activityDetail.do?activityRecno=" + recno
                String activityDetailQrcodeLink = networkProtocol+"://"+ip+":"+port+webApp+"/mobile/activity/activityDetail.do?activityRecno="+recno;
                ZxingUtil.encode2DCode(file, activityDetailQrcodeLink);
            } catch (WriterException | IOException e) {
                e.printStackTrace();
            }
        }
        response.setContentType("image/jpg");
        BufferedInputStream inputStream =null;
        BufferedOutputStream outputStream = null;
        try {
            inputStream = new BufferedInputStream(new FileInputStream(file));
            outputStream = new BufferedOutputStream(response.getOutputStream());
            flushStream(inputStream, outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(inputStream!=null){
                    inputStream.close();
                }
                if(outputStream!=null){
                    outputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }

然后調用一個方法,刷新緩沖流

private void flushStream(InputStream fis, OutputStream os) throws IOException {//刷新字節流
int count = 0;
byte[] buffer = new byte[1024 * 8];
while ((count = fis.read(buffer)) != -1) {
os.write(buffer, 0, count);
os.flush();
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM