当前位置:   article > 正文

关于ajax post请求,参数过大产生的问题解决 Java_ajax请求参数过大

ajax请求参数过大
之前做了一个图片上传的功能,前端是把图片编码成BASE64,但是图片一大了,后台用request.getParameter("前端参数");来接收参数打印不出来,没有值,这就很尴尬了

然后一直觉得是前端POST没传过来,左思右想都觉得不应该,POST没有大小限制啊,
后来用debug查看,发现后台数据时传输过来了

原来request.getParameter("前端参数");是有大小限制,超过一定大小后就无法接受数据,后面改成用原始的方式来接收数据

  1. StringBuilder sb = new StringBuilder();
  2. try (BufferedReader reader = request.getReader();) {
  3. char[] buff = new char[1024*1024];
  4. int len;
  5. while ((len = reader.read(buff)) != -1) {
  6. sb.append(buff, 0, len);
  7. }
  8. } catch (IOException e) {
  9. e.printStackTrace();
  10. }


参数= this.splitString(sb.toString(), "参数=");

  1. public String splitString(String str, String temp) {
  2. String result = null;
  3. if (str.indexOf(temp) != -1) {
  4. if (str.substring(str.indexOf(temp)).indexOf("&") != -1) {
  5. result = str.substring(str.indexOf(temp)).substring(str.substring(str.indexOf(temp)).indexOf("=") + 1,
  6. str.substring(str.indexOf(temp)).indexOf("&"));
  7. } else {
  8. result = str.substring(str.indexOf(temp)).substring(str.substring(str.indexOf(temp)).indexOf("=") + 1);
  9. }
  10. }
  11. return result;
  12. }



这样写了过后发现参数还是无法接收,郁闷ing,然后让同事帮我看看,后面他看了半天说没什么问题啊,你试了什么图片,他一提醒,于是分别试了下大小图片,结果发现小图片转换后,用原始的方式又接收不到参数,于是后面又改了下

  1. String 参数= request.getParameter("参数"); //
  2. if (判断参数是否为空) {
  3. StringBuilder sb = new StringBuilder();
  4. try (BufferedReader reader = request.getReader();) {
  5. char[] buff = new char[1024*1024];
  6. int len;
  7. while ((len = reader.read(buff)) != -1) {
  8. sb.append(buff, 0, len);
  9. }
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. }
  13. 参数= this.splitString(sb.toString(), "参数=");
  14. }

PS:但是我现在还不太确定这是不是非黑即白,大家请自测。

现在大小参数都能够接收了,但是我放到代码里进行解码却发现大图片解析过后图片不正确
然后我将大小的两种图片编码都进行了字符串截取,查看前30个字符,发现后者将 传过来的数据再一次进行了编码,于是采用URLDecoder.decode(参数,"UTF-8");成功解决问题

  1. String 参数= request.getParameter("参数"); //
  2. if (判断参数是否为空) {
  3. StringBuilder sb = new StringBuilder();
  4. try (BufferedReader reader = request.getReader();) {
  5. char[] buff = new char[1024*1024];
  6. int len;
  7. while ((len = reader.read(buff)) != -1) {
  8. sb.append(buff, 0, len);
  9. }
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. }
  13. 参数 = this.splitString(sb.toString(), "参数=");
  14. 参数 = URLDecoder.decode(参数,"UTF-8");
  15. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号