zoukankan      html  css  js  c++  java
  • 关于ajax post请求,参数过大产生的问题解决 Java

    之前做了一个图片上传的功能,前端是把图片编码成BASE64,但是图片一大了,后台用request.getParameter("前端参数");来接收参数打印不出来,没有值,这就很尴尬了
     
    然后一直觉得是前端POST没传过来,左思右想都觉得不应该,POST没有大小限制啊,
    后来用debug查看,发现后台数据时传输过来了
     
    原来request.getParameter("前端参数");是有大小限制,超过一定大小后就无法接受数据,后面改成用原始的方式来接收数据
     
            StringBuilder sb = new StringBuilder();
            try (BufferedReader reader = request.getReader();) {
                char[] buff = new char[1024*1024];
                int len;
                while ((len = reader.read(buff)) != -1) {
                    sb.append(buff, 0, len);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }  
    参数= this.splitString(sb.toString(), "参数=");
     
     
    public String splitString(String str, String temp) {
            String result = null;
            if (str.indexOf(temp) != -1) {
                if (str.substring(str.indexOf(temp)).indexOf("&") != -1) {
                    result = str.substring(str.indexOf(temp)).substring(str.substring(str.indexOf(temp)).indexOf("=") + 1,
                            str.substring(str.indexOf(temp)).indexOf("&"));
    
                } else {
                    result = str.substring(str.indexOf(temp)).substring(str.substring(str.indexOf(temp)).indexOf("=") + 1);
    
                }
            }
            return result;
        }
     
    这样写了过后发现参数还是无法接收,郁闷ing,然后让同事帮我看看,后面他看了半天说没什么问题啊,你试了什么图片,他一提醒,于是分别试了下大小图片,结果发现小图片转换后,用原始的方式又接收不到参数,于是后面又改了下
     
     
        String 参数= request.getParameter("参数"); //
            if (判断参数是否为空) {
                StringBuilder sb = new StringBuilder();
                try (BufferedReader reader = request.getReader();) {
                    char[] buff = new char[1024*1024];
                    int len;
                    while ((len = reader.read(buff)) != -1) {
                        sb.append(buff, 0, len);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                参数= this.splitString(sb.toString(), "参数=");
            }
    PS:但是我现在还不太确定这是不是非黑即白,大家请自测。
     
    现在大小参数都能够接收了,但是我放到代码里进行解码却发现大图片解析过后图片不正确
    然后我将大小的两种图片编码都进行了字符串截取,查看前30个字符,发现后者将传过来的数据再一次进行了编码,于是采用URLDecoder.decode(参数,"UTF-8");成功解决问题
     
        String 参数= request.getParameter("参数"); //
            if (判断参数是否为空) {
                StringBuilder sb = new StringBuilder();
                try (BufferedReader reader = request.getReader();) {
                    char[] buff = new char[1024*1024];
                    int len;
                    while ((len = reader.read(buff)) != -1) {
                        sb.append(buff, 0, len);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                参数 = this.splitString(sb.toString(), "参数=");
                            参数 = URLDecoder.decode(参数,"UTF-8");
            }

    欢迎大家加入QQ群一起交流

  • 相关阅读:
    ERROR Function not available to this responsibility.Change responsibilities or contact your System Administrator.
    After Upgrade To Release 12.1.3 Users Receive "Function Not Available To This Responsibility" Error While Selecting Sub Menus Under Diagnostics (Doc ID 1200743.1)
    产品设计中先熟练使用铅笔 不要依赖Axure
    12.1.2: How to Modify and Enable The Configurable Home Page Delivered Via 12.1.2 (Doc ID 1061482.1)
    Reverting back to the R12.1.1 and R12.1.3 Homepage Layout
    常见Linux版本
    网口扫盲二:Mac与Phy组成原理的简单分析
    VMware 8安装苹果操作系统Mac OS X 10.7 Lion正式版
    VMware8安装MacOS 10.8
    回顾苹果操作系统Mac OS的发展历史
  • 原文地址:https://www.cnblogs.com/shiyuelp/p/6061275.html
Copyright © 2011-2022 走看看