首先咱们上一下控制台打印异常:
16:06:58.970 [http-nio-9220-exec-1] INFO o.a.c.h.Http11Processor - [log,182] - Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: Request header is too large
微服务接口中有一个业务,需要调用客户端接口转入了base64编码后的字符编码文件
初步一看是请求头里面携带的参数太大了导致的,默认咱们请求头允许携带的数据大小是。默认情况下,tomcat(8.0版本)允许的http请求header的最大值是8024个字节(8KB)
设置请求头大小后,重启服务即可
server:
max-http-header-size: 102400 #文件上转大小字节
为什么不推荐方案一 刚刚开始这样是能解决问题,但是后来自己仔细一想主要有2个方面的问题,
我们使用Feign调用时,默认会将参数header中也存放一份,所以就导致了header is too large,使用MultiValueMap解决这种问题了。
服务端:
/**
* 上传图片、视频,文件
*/
@PostMapping(value = "/test" )
public ResultDTO test(@RequestBody MultiValueMap<String,String> map ) throws IOException{
String base64 = map.getFirst("key");
System.out.println(base64);
MultipartFile multipartFile = BASE64DecodedMultipartFileUtil.base64ToMultipart(base64);
return ResultDTO.requestSuccess(ossService.upload(multipartFile,1));
}
客户端:
/***
* 上转文件
* @param map
* @return
*/
@PostMapping(value = "inner/file/test")
ResultDTO test(MultiValueMap<String,String> map );