之前做了一個圖片上傳的功能,前端是把圖片編碼成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群一起交流
