方案一:
tomcat部署下默認post請求提交參數大小為2M左右,超過這個大小,就會傳值不成功
要使post請求參數無大小限制,需要在server.xml上修改,如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="2000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="3000"
compression="on" compressableMimeType="text/html,text/xml"
maxPostSize="-1"/>
<Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />
其中參數maxPostSize="-1"是限制post請求參數的大小,tomcat7.0.63之前的版本設置為0和負數均可以代表不限制。但是7.0.63之后的版本只有設置為負數才代表不限制數據大小
方案二:
先用 js 判斷 base64 大小,大於2m轉為文件再上傳。
getImgSize(str) {
//獲取base64圖片大小,返回KB數字 var str = base64url.replace('data:image/jpeg;base64,', '');//這里根據自己上傳圖片的格式進行相應修改 var strLength = str.length; var fileLength = parseInt(strLength - (strLength / 8) * 2); // 由字節轉換為KB var size = ""; size = (fileLength / 1024).toFixed(2); return parseInt(size); },
base64:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZxxxxxxxkopKACiiigApaSloA/9k=
// 上傳圖片
function upload(image) {
var imgFile=dataURLtoFile(image,"img.png");
var xhr=new XMLHttpRequest();
var fd=new FormData();
xhr.open('POST','/springStudy/user/multifiles');
fd.append("multipartFile",imgFile);
xhr.send(fd);
console.log('上傳json!')
}
//將圖片Base64 轉成文件
function dataURLtoFile(dataurl, filename) {
console.log("轉文件")
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
}
