tomcat 下 base64图片上传超过2m的解决方案
方案一:
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});
}