ajax文件上传;post方式getparameter获取不到值;getReader取值方法

post方式进行文件上传的时候,servlet会出现getparameter获取到的值为null;这时候通过比较发现只有在文件的二进制大小超过一定的大小的情况下会出现这种情况;
通过翻阅治疗发现这种现象产生的原因是servlet的编码发生发生了改变
1、Content-Type="application/x-www-form-urlencoded"是默认的编码方式
2、Content-Type="multipart/form-data"

第一种方式是默认的也是和parameter方法匹配的编码方式;当文件比较小的时候采用的是这种方式;所以后台可以通过getparameter获取到值;
如果大小超过了限制编码就会转换为第二种方式,这种情况下用getparameter就获取不到值了;
可选选择用getReader取值;并且该方法对上面两种编码方式都适用

BufferedReader reader = request.getReader();
        String s;
        StringBuffer sb = new StringBuffer();
        while ((s = reader.readLine()) != null) {
            s = URLDecoder.decode(s, "UTF-8");//解码
            sb.append(s);
        }
        String sbStr = sb.toString();
      //封装到map中
        Map<String, Object> map = transStringToMap(sbStr, "&", "=");
        for (String key : map.keySet()) {
        
            // System.out.println("key:" + key + ", value:" + map.get(key));
        }

这里需要注意的是getParameter、getInputStream和getReader是互斥的,当流被其中一种方式读取后可能字节发生了改变,这时候用另外一种方法无论如何都获取不到的!

附url的解码说明:https://www.cnblogs.com/404code/p/10000278.html

将url封装到Map中的方法:https://www.cnblogs.com/404code/p/10018522.html

posted @ 2018-11-26 09:20  杜小二  阅读(1014)  评论(0编辑  收藏  举报