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群一起交流

  • 相关阅读:
    hdu4549(费马小定理 + 快速幂)
    java 四种实现延迟加载的方法
    浅谈java缓存
    JavaWeb实现文件上传下载功能实例解析
    java分页之页面分页
    浅析Java开发模式—Model1、Model2和三层
    构建一个简单的基于MVC模式的JavaWeb
    Java中MVC详解以及优缺点总结
    Servlet
    通过JDBC进行简单的增删改查(以MySQL为例)
  • 原文地址:https://www.cnblogs.com/shiyuelp/p/6061275.html
Copyright © 2011-2022 走看看