springboot前台传base64太大 后台无法接收

server:
  tomcat:
    max-http-post-size: -1
  port: 8085

在 yml中添加:

 

server:
  tomcat:
    max-http-post-size: -1
 

即可

 

在 Spring Boot 应用中接收和解码 Base64 编码的数据可以通过多种方式实现,具体取决于数据的来源和使用场景。以下是几种常见场景的实现方式。 ### 接收 Base64 编码的请求体 如果客户端通过 POST 请求发送 Base64 编码的数据,并希望在服务端进行统一解码,可以使用 `RequestBodyAdvice` 来拦截请求并进行解码处理。定义一个 `@DecodeBody` 注解用于标记需要解码的方法参数,然后实现 `RequestBodyAdvice` 接口来处理解码逻辑[^1]。以下是一个简单的实现示例: ```java @ControllerAdvice public class Base64DecodeRequestBodyAdvice implements RequestBodyAdvice { @Override public boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { return methodParameter.hasParameterAnnotation(DecodeBody.class); } @Override public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException { return new HttpInputMessage() { @Override public InputStream getBody() throws IOException { String encodedData = StreamUtils.copyToString(inputMessage.getBody(), StandardCharsets.UTF_8); byte[] decodedData = Base64.getDecoder().decode(encodedData); return new ByteArrayInputStream(decodedData); } @Override public HttpHeaders getHeaders() { return inputMessage.getHeaders(); } }; } @Override public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { return body; } @Override public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { return body; } } ``` ### 处理 Base64 编码的文件上 如果前端发送的是 Base64 编码的文件数据,例如图片数据,可以通过解析数据头部信息并解码数据主体部分来获取 `MultipartFile` 对象。以下是一个示例方法: ```java public MultipartFile decodeBase64ToMultipartFile(String base64Data) { String[] parts = base64Data.split(","); String header = parts[0]; // 数据头部,例如 data:image/png;base64 String data = parts[1]; // 数据主体部分 byte[] decodedBytes = Base64.getDecoder().decode(data); return new MockMultipartFile("file", decodedBytes); } ``` ### 将 Base64 数据转换为对象 如果需要将 Base64 编码的数据转换为特定的对象,可以使用 `ObjectMapper` 和 `Base64Utils` 来实现。以下是一个示例方法: ```java public static <T> T base64ToVO(String key, Class<T> clazz) { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略未知字段 try { return objectMapper.readValue(Base64Utils.decodeFromString(key), clazz); } catch (IOException e) { // 处理异常 throw new RuntimeException(e); } } ``` ### 示例控制器 以下是一个示例控制器,展示了如何使用上述方法: ```java @RestController @RequestMapping("/api") public class BaseController { @PostMapping("/decode") public ResponseEntity<String> decodeData(@DecodeBody @RequestBody String decodedData) { // 处理解码后的数据 return ResponseEntity.ok("Decoded Data: " + decodedData); } @PostMapping("/upload") public ResponseEntity<String> uploadFile(@RequestParam("data") String base64Data) { MultipartFile file = decodeBase64ToMultipartFile(base64Data); // 处理上的文件 return ResponseEntity.ok("File uploaded successfully"); } @PostMapping("/convert") public ResponseEntity<String> convertData(@RequestBody String base64Data) { MyDataObject dataObject = base64ToVO(base64Data, MyDataObject.class); // 处理转换后的对象 return ResponseEntity.ok("Converted Object: " + dataObject.toString()); } } ``` ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值