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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM