Ajax请求二进制流并在页面展示
后端代码:
- public void getIntegralQrcode(HttpServletResponse response, String token) throws BizException, IOException, WriterException {
- logger.info("qrcode info ...");
- response.setCharacterEncoding("UTF-8");
- response.reset();
- ServletOutputStream os = response.getOutputStream();
- // 请求地址
- String url = ConfigProperties.getUrl();
- logger.info("qrcode info request url -- > {}", url);
- // 加密内容
- String base64Code = Base64Utils.getBase64Code(WechatQrcodeTypeEnum.H5.getValue(), maculaConfig.getIntegralQrcodeScanName(), null);
- logger.info("qrcode info base64Code -- > {}", base64Code);
- // 二维码内容
- String content = WechatQrcodeUtil.getRequestUrl(url, "2", base64Code);
- logger.info("qrcode info -- > {}", content);
- QRCodUtil.encodeQRCodeImage(content, null, WechatQrcodeUtil.IMAGE_WIDTH, WechatQrcodeUtil.IMAGE_HEIGHT, os);
- os.flush();
- os.close();
- }
后端工具类:
- public class WechatQrcodeUtil {
- static Logger logger = LoggerFactory.getLogger(WechatQrcodeUtil.class);
- private static final String TYPE = "type";
- private static final String NAME = "name";
- private static final String PARAM = "param";
// 加密内容定义区域key- private static final String base64= "base64";
- private static final String EQUAL_STR = "=";
- private static final String AND_STR = "&";
- private static final String QUE_STR = "?";
- public static final int IMAGE_WIDTH = 262;
- public static final int IMAGE_HEIGHT = 262;
- /**
- * 放入二维码内容
- *
- * @param url 请求地址
- * @param modelType 请求模块名称
- * @param base64 加密内容
- * @return
- */
- public static String getRequestUrl(String url, String modelType, String base64){
- StringBuffer sb = new StringBuffer();
- sb.append(url);
- sb.append(QUE_STR);
- sb.append(TYPE).append(EQUAL_STR).append(modelType);
- sb.append(AND_STR);
- sb.append(base64).append(EQUAL_STR).append(base64);
- logger.info("request address: {}", sb.toString());
- return sb.toString();
- }
- /**
- * 获取加密参数内容
- * @param type 类型 @see{WechatQrcodeTypeEnum}
- * @param name
- * <li>channelName:</li>
- * <li>moduleName:</li>
- * <li>httpurl:在线页面地址</li>
- * @param urlParams key:value,key:value,...
- *
- * @return
- * @throws UnsupportedEncodingException
- */
- public static String getBase64Code(String type, String name, Object... urlParams) throws UnsupportedEncodingException{
- StringBuffer sb = new StringBuffer();
- sb.append(TYPE).append(EQUAL_STR).append(type);
- sb.append(AND_STR);
- sb.append(NAME).append(EQUAL_STR).append(name);
- if(urlParams != null){
- sb.append(AND_STR);
- sb.append(PARAM).append(EQUAL_STR).append(urlParams);
- }
- logger.info("request params: {}", sb.toString());
- return Base64.encode(sb.toString().getBytes());
- }
- }
前端Ajax请求:
- <#--
- * README
- * 在页面定义页面token<i><@macula.formToken /></i>
- *
- * @author add by liuyc in 2018-11-28
- *
- -->
- <div id="qrcode-image" class="bottom-image"></div>
- <script type="text/javascript">
- window.onload = function(){
- var xhr = new XMLHttpRequest();
- var url = base + "/qrcode?token=" + $("input[name='ftoken']").val();
- xhr.open('GET', url, true);
- xhr.responseType = "blob";
- xhr.onload = function () {
- if (this.status == 200) {
- var blob = this.response;
- var img = document.createElement("img");
- img.onload = function (e) {
- window.URL.revokeObjectURL(img.src);
- };
- img.src = window.URL.createObjectURL(blob);
- document.getElementById("qrcode-image").appendChild(img);
- }
- }
- xhr.send();
- }
- </script>
写入页面后的展示:
Ajax请求二进制流并在页面展示的更多相关文章
- ajax 请求二进制流 图片
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...
- ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践
写在前面 :从提出需求到完美的解决问题,实现过程是曲折的. 需求:在前(web client)后(Restful Service)端完全解耦的模式框架下,webclient需要请求 Service 返 ...
- 第六章 MVC之 FileResult和JS请求二进制流文件
一.FileResult 1.简介 表示一个用于将二进制文件内容发送到响应的基类.它有三个子类: FileContentResultFilePathResultFileStreamResult 推荐阅 ...
- ajax请求二进制流图片并渲染到html中img标签
日常显示图片都诸如这种形式:直接使用img的src属性 <img src="图片路径.地址" alt="" /> 以上方法无法在获取图片请求中设置请 ...
- JavaScript读二进制文件并用ajax传输二进制流
综合网上多个教程,加上自己实践得出的方法,目前能够兼容谷歌.IE11.IE10. htmlbody里的内容,没什么特殊的. <div id="dConfirm"> &l ...
- 通过配置http拦截器,来进行ajax请求验证用户登录的页面跳转
在.NET中验证用户是否登录或者是否过期,若需要登录时则将请求转向至登录页面. 这个流程在进行页面请求时是没问题的,能正确进行页面跳转. 然而在使用xmlhttprequest时,或者jq的getJs ...
- ajax请求后弹开新页面被浏览器拦截
window.open()我想应该很多人都不陌生吧,它可以实现除用a标签以外来实现打开新窗口! 最近开发项目用到时,却遇到了麻烦,本来好好的弹出窗口,结果被浏览器无情的给拦截了! 代码如下: $.ge ...
- SpringMVC响应Ajax请求(@Responsebody注解返回页面)
项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...
- session过期,拦截ajax请求并跳转登录页面
1.方法一 :1.1使用filter 和ajaxsetup 对ajax进行拦截并跳转登录页面 public void doFilter(ServletRequest request, ServletR ...
随机推荐
- Java内存溢出异常(上)
上一篇文章我们讲了JVM运行时数据区域与内存溢出异常,其中对于内存溢出异常这部分将的不够详细,这篇文章将着重讲解Java内存溢出异常的相关知识.如果有没看过上一篇文章的小伙伴们,请点击Java内存区域 ...
- selenium切换窗口后定位元素出现问题的解决方案
在做UI自动化的过程中,有时需要由一个窗口跳转到另一个窗口,这时直接去定位页面元素,可能会出现问题,这时,我们需要将driver与新的窗口进行绑定. 完整代码如下:(python版) #coding= ...
- pip命令出现了问题,提示说找不到ssl模块
Could not find a version that satisfies the requirement pygame (from versions: ) No matching distrib ...
- (转)RBAC权限模型——项目实战
一.前言 权限一句话来理解就是对资源的控制,对web应用来说就是对url的控制,关于权限可以毫不客气的说几乎每个系统都会包含,只不过不同系统关于权限的应用复杂程序不一样而已,现在我们在用的权限模型基本 ...
- Voronoi图和Delaunay三角剖分
刷题的时候发现了这么一个新的东西:Voronoi图和Delaunay三角剖分 发现这个东西可以$O(nlogn)$解决平面图最小生成树问题感觉非常棒 然后就去学了.. 看的n+e的blog,感谢n+e ...
- react_app 项目开发
react_app 项目开发 npm install -g create-react-app npm root -g // 查看安装包位置 创建项目 create-react-app m ...
- 在循环中如何取input的值和增加点击事件
{volist name="dianpu" id="dianpu"} <input style="border: none;" rea ...
- HTTP学习总结
首先是一张总结的图: 对各个不同的通信进行解分: 1.http通信详解 2.cookie通信图: 3.cookie管理的session信息 4.token通信
- Ehcache 3.7文档—基础篇—GettingStarted
为了使用Ehcache,你需要配置CacheManager和Cache,有两种方式可以配置java编程配置或者XML文件配置 一. 通过java编程配置 CacheManager cacheManag ...
- 弄懂JDK、JRE和JVM到底是什么
首先是JDK JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bi ...