zoukankan      html  css  js  c++  java
  • 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>

     写入页面后的展示:

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

    如果,想给予我更多的鼓励,求打

    欢迎大家关注我的个人博客 Lycos | 小站 !由于最近没时间处理,原域名http://www.liuyuchuan.com暂时停止使用

  • 相关阅读:
    VisionPro 极坐标圆形物体缺陷检测
    VisionPro CogSobeEdgeTool工具
    VisionPro CogLinescanDistortionCorrectionTool工具 图像处理工具
    VisionPro CogIPTwoImageSubtractTool工具 图像处理工具
    云原生技术实践-关键要素和原则
    深度解析项目管理
    商业进化图谱
    一张图理解网络的几个专有名词:数据、段、包、帧、比特
    泛在感知中台建设方案
    区块链生态架构图
  • 原文地址:https://www.cnblogs.com/yuchuan/p/ajax_qrcode.html
Copyright © 2011-2022 走看看