如何避免Java接收base64字符串的坑?

一、问题发现

1.可能因为base64字符太长,导致后端处理时出错,表现为前端请求报400错误;

2.前端传数据到后端时可能base64字符串中的特殊字符被替换,例如+被替换成空格,表现为上传的图片不完整

二、问题解决

1.问题1解决方法:

1.1.在配置文件中设置server.max-http-header-size(最大http请求头大小),其默认值为8KB,通常图片的base64会超过默认值,但是也不是越大越好(我设置2MB,然后前端再限制一下图片的大小或者压缩图片),大了反而有大问题,详情请看server.max-http-header-size的坑

2.问题2解决方法:

2.1.前端对base64字符串编码之后再传给后端处理,后端不需要解码,因为接收base64字符串时springmvc会进行一次解码

2.2.也可以通过将被替换的字符手动换回来,不过不推荐使用,你不知道究竟还有没有其他特殊字符被替换

String replace = base64.replace(" ", "+");
MultipartFile multipartFile = BASE64DecodedMultipartFile.base64ToMultipart(replace);

三.建议能不使用base64上传文件就不使用,一张2MB的图片转成base64字符串大概有3000000+个字符,想想都可怕啊

你可能感兴趣的:(小记)