tomcat默认请求参数最大值及页面图片压缩处理方法

引:

最近小编在开发一套活体流程业务,其中有这么一个功能:需要用户上送自己的身份证正反面照片,所以就得自己开发一个页面,然后页面展示用户上传的图片再以base64格式将数据传输到后台做处理。

遇到的问题点:

pc端上传图片数据到后台服务器正常、而手机端上传数据服务器却接收不到数据信息。

解决思路:

1、通过查阅资料发现:tomcat中默认的请求数据内容大小为:2M

2、通过抓包或者对比手机端和pc端的图片信息发现手机端的图片数据高达6M而pc端的图片却只有300KB不到,明明是同样的图片为什么数据大小会差这么多?后面发现我是通过“微信”发送图片到的电脑上,这个过程微信自己给我们的图片做了压缩处理。

3、在页面新增压缩语句处理解决问题。(当然也可以修改tomcat中的参数)

压缩代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52


//画布压缩图片
function dealImage(base64, w, callback) {
var newImage = new Image();
var quality = 0.6; //压缩系数0-1之间
newImage.src = base64;
// newImage.setAttribute("crossOrigin", 'Anonymous'); //url为外域时需要
var imgWidth, imgHeight;
newImage.onload = function () {
imgWidth = this.width;
imgHeight = this.height;
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
if (Math.max(imgWidth, imgHeight) > w) {
if (imgWidth > imgHeight) {
canvas.width = w;
canvas.height = w * imgHeight / imgWidth;
} else {
canvas.height = w;
canvas.width = w * imgWidth / imgHeight;
}
} else {
canvas.width = imgWidth;
canvas.height = imgHeight;
quality = 0.6;
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
var base64 = canvas.toDataURL("image/jpeg", quality); //压缩语句
// 如想确保图片压缩到自己想要的尺寸,如要求在50-150kb之间,请加以下语句,quality初始值根据情况自定
while (base64.length / 1024 > 150) {
quality -= 0.01;
base64 = canvas.toDataURL("image/jpeg", quality);
}
// 防止最后一次压缩低于最低尺寸,只要quality递减合理,无需考虑
while (base64.length / 1024 < 50) {
quality += 0.001;
base64 = canvas.toDataURL("image/jpeg", quality);
}
callback(base64);//必须通过回调函数返回,否则无法及时拿到该值
}
}

dealImage(front, 800, rFont);

function rFont(frontBase64) {
$("#front").val(frontBase64);
//国徽压缩
}