后端代码:

  1. public void getIntegralQrcode(HttpServletResponse response, String token) throws BizException, IOException, WriterException {
  2. logger.info("qrcode info ...");
  3.  
  4. response.setCharacterEncoding("UTF-8");
  5. response.reset();
  6. ServletOutputStream os = response.getOutputStream();
  7.  
  8. // 请求地址
  9. String url = ConfigProperties.getUrl();
  10. logger.info("qrcode info request url -- > {}", url);
  11.  
  12. // 加密内容
  13. String base64Code = Base64Utils.getBase64Code(WechatQrcodeTypeEnum.H5.getValue(), maculaConfig.getIntegralQrcodeScanName(), null);
  14. logger.info("qrcode info base64Code -- > {}", base64Code);
  15.  
  16. // 二维码内容
  17. String content = WechatQrcodeUtil.getRequestUrl(url, "2", base64Code);
  18. logger.info("qrcode info -- > {}", content);
  19.  
  20. QRCodUtil.encodeQRCodeImage(content, null, WechatQrcodeUtil.IMAGE_WIDTH, WechatQrcodeUtil.IMAGE_HEIGHT, os);
  21. os.flush();
  22. os.close();
  23. }

后端工具类:

  1. public class WechatQrcodeUtil {
  2.  
  3. static Logger logger = LoggerFactory.getLogger(WechatQrcodeUtil.class);
  4.  
  5. private static final String TYPE = "type";
  6. private static final String NAME = "name";
  7. private static final String PARAM = "param";

  8. // 加密内容定义区域key
  9. private static final String base64= "base64";
  10.  
  11. private static final String EQUAL_STR = "=";
  12. private static final String AND_STR = "&";
  13. private static final String QUE_STR = "?";
  14.  
  15. public static final int IMAGE_WIDTH = 262;
  16. public static final int IMAGE_HEIGHT = 262;
  17.  
  18. /**
  19. * 放入二维码内容
  20. *
  21. * @param url 请求地址
  22. * @param modelType 请求模块名称
  23. * @param base64 加密内容
  24. * @return
  25. */
  26. public static String getRequestUrl(String url, String modelType, String base64){
  27. StringBuffer sb = new StringBuffer();
  28. sb.append(url);
  29. sb.append(QUE_STR);
  30. sb.append(TYPE).append(EQUAL_STR).append(modelType);
  31. sb.append(AND_STR);
  32. sb.append(base64).append(EQUAL_STR).append(base64);
  33. logger.info("request address: {}", sb.toString());
  34. return sb.toString();
  35. }
  36.  
  37. /**
  38. * 获取加密参数内容
  39. * @param type 类型 @see{WechatQrcodeTypeEnum}
  40. * @param name
  41. * <li>channelName:</li>
  42. * <li>moduleName:</li>
  43. * <li>httpurl:在线页面地址</li>
  44. * @param urlParams key:value,key:value,...
  45. *
  46. * @return
  47. * @throws UnsupportedEncodingException
  48. */
  49. public static String getBase64Code(String type, String name, Object... urlParams) throws UnsupportedEncodingException{
  50. StringBuffer sb = new StringBuffer();
  51. sb.append(TYPE).append(EQUAL_STR).append(type);
  52. sb.append(AND_STR);
  53. sb.append(NAME).append(EQUAL_STR).append(name);
  54. if(urlParams != null){
  55. sb.append(AND_STR);
  56. sb.append(PARAM).append(EQUAL_STR).append(urlParams);
  57. }
  58. logger.info("request params: {}", sb.toString());
  59. return Base64.encode(sb.toString().getBytes());
  60. }
  61.  
  62. }

前端Ajax请求:

  1. <#--
  2. * README
  3. * 在页面定义页面token<i><@macula.formToken /></i>
  4. *
  5. * @author add by liuyc in 2018-11-28
  6. *
  7. -->
  8.  
  9. <div id="qrcode-image" class="bottom-image"></div>
  10.  
  11. <script type="text/javascript">
  12.  
  13. window.onload = function(){
  14.  
  15. var xhr = new XMLHttpRequest();
  16.  
  17. var url = base + "/qrcode?token=" + $("input[name='ftoken']").val();
  18. xhr.open('GET', url, true);
  19.  
  20. xhr.responseType = "blob";
  21. xhr.onload = function () {
  22. if (this.status == 200) {
  23. var blob = this.response;
  24. var img = document.createElement("img");
  25. img.onload = function (e) {
  26. window.URL.revokeObjectURL(img.src);
  27. };
  28. img.src = window.URL.createObjectURL(blob);
  29. document.getElementById("qrcode-image").appendChild(img);
  30. }
  31. }
  32. xhr.send();
  33. }
  34.  
  35. </script>

写入页面后的展示:

Ajax请求二进制流并在页面展示的更多相关文章

  1. ajax 请求二进制流 图片

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    ...

  2. ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践

    写在前面 :从提出需求到完美的解决问题,实现过程是曲折的. 需求:在前(web client)后(Restful Service)端完全解耦的模式框架下,webclient需要请求 Service 返 ...

  3. 第六章 MVC之 FileResult和JS请求二进制流文件

    一.FileResult 1.简介 表示一个用于将二进制文件内容发送到响应的基类.它有三个子类: FileContentResultFilePathResultFileStreamResult 推荐阅 ...

  4. ajax请求二进制流图片并渲染到html中img标签

    日常显示图片都诸如这种形式:直接使用img的src属性 <img src="图片路径.地址" alt="" /> 以上方法无法在获取图片请求中设置请 ...

  5. JavaScript读二进制文件并用ajax传输二进制流

    综合网上多个教程,加上自己实践得出的方法,目前能够兼容谷歌.IE11.IE10. htmlbody里的内容,没什么特殊的. <div id="dConfirm"> &l ...

  6. 通过配置http拦截器,来进行ajax请求验证用户登录的页面跳转

    在.NET中验证用户是否登录或者是否过期,若需要登录时则将请求转向至登录页面. 这个流程在进行页面请求时是没问题的,能正确进行页面跳转. 然而在使用xmlhttprequest时,或者jq的getJs ...

  7. ajax请求后弹开新页面被浏览器拦截

    window.open()我想应该很多人都不陌生吧,它可以实现除用a标签以外来实现打开新窗口! 最近开发项目用到时,却遇到了麻烦,本来好好的弹出窗口,结果被浏览器无情的给拦截了! 代码如下: $.ge ...

  8. SpringMVC响应Ajax请求(@Responsebody注解返回页面)

    项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...

  9. session过期,拦截ajax请求并跳转登录页面

    1.方法一 :1.1使用filter 和ajaxsetup 对ajax进行拦截并跳转登录页面 public void doFilter(ServletRequest request, ServletR ...

随机推荐

  1. Java内存溢出异常(上)

    上一篇文章我们讲了JVM运行时数据区域与内存溢出异常,其中对于内存溢出异常这部分将的不够详细,这篇文章将着重讲解Java内存溢出异常的相关知识.如果有没看过上一篇文章的小伙伴们,请点击Java内存区域 ...

  2. selenium切换窗口后定位元素出现问题的解决方案

    在做UI自动化的过程中,有时需要由一个窗口跳转到另一个窗口,这时直接去定位页面元素,可能会出现问题,这时,我们需要将driver与新的窗口进行绑定. 完整代码如下:(python版) #coding= ...

  3. pip命令出现了问题,提示说找不到ssl模块

    Could not find a version that satisfies the requirement pygame (from versions: ) No matching distrib ...

  4. (转)RBAC权限模型——项目实战

    一.前言 权限一句话来理解就是对资源的控制,对web应用来说就是对url的控制,关于权限可以毫不客气的说几乎每个系统都会包含,只不过不同系统关于权限的应用复杂程序不一样而已,现在我们在用的权限模型基本 ...

  5. Voronoi图和Delaunay三角剖分

    刷题的时候发现了这么一个新的东西:Voronoi图和Delaunay三角剖分 发现这个东西可以$O(nlogn)$解决平面图最小生成树问题感觉非常棒 然后就去学了.. 看的n+e的blog,感谢n+e ...

  6. react_app 项目开发

    react_app 项目开发 npm install -g create-react-app npm root -g        // 查看安装包位置 创建项目 create-react-app m ...

  7. 在循环中如何取input的值和增加点击事件

    {volist name="dianpu" id="dianpu"} <input style="border: none;" rea ...

  8. HTTP学习总结

    首先是一张总结的图: 对各个不同的通信进行解分: 1.http通信详解 2.cookie通信图: 3.cookie管理的session信息 4.token通信

  9. Ehcache 3.7文档—基础篇—GettingStarted

    为了使用Ehcache,你需要配置CacheManager和Cache,有两种方式可以配置java编程配置或者XML文件配置 一. 通过java编程配置 CacheManager cacheManag ...

  10. 弄懂JDK、JRE和JVM到底是什么

    首先是JDK JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bi ...