背景
微服务接口中有一个业务,需要调用客户端接口转入了base64编码后的字符编码文件
原因:
我们使用OpenFeign调用时,默认会将参数header中也存放一份,所以就导致了header is too large
解决方案:
1、去掉转入了base64编码的 Feign接口,直接复用原来的文件上传接口
2、接将Form表单中的base64字符串,转为MultipartFile对象
@PostMapping("/base64/upload")
public R<String> upload(@RequestParam(value = "file",required = false) MultipartFile file , @RequestParam(value = "base64") String base64) {
if (StringUtils.isBlank(base64) ) {
return R.fail("Base64 string is empty");
}
R<SysFile> fileResult = remoteFileService.upload(convert(base64,"tmpPic"));
...
}
base64Str 转 MultipartFile 对象
private static MultipartFile convert(String base64String, String fileName) {
// 解析base64字符串,分割出编码格式和数据
String[] base64Info = base64String.split(";base64,");
String base64Content = base64Info[1]; // 数据部分
String contentType = base64Info[0].split(":")[1].split(";")[0]; // 文件类型
// 解码Base64字符串为字节数组
byte[] bytes = Base64.getDecoder().decode(base64Content);
// 创建MockMultipartFile对象并设置文件内容和文件名
return new MockMultipartFile(fileName, fileName +"." + contentType.split("/")[1], contentType, bytes);
}
或参考下面解决方案
Feign请求中Request header is too large 解决方案_feign request header is too large-CSDN博客