programing

스프링 부트 - 다중 파트 파일 최대 업로드 크기 예외

batch 2023. 8. 14. 22:42
반응형

스프링 부트 - 다중 파트 파일 최대 업로드 크기 예외

(표준 Tomcat 내장 웹 서버를 사용하여) Spring Boot 2.1.3으로 이미지를 업로드하는 엔드포인트를 개발하고 있으며 멀티파트 업로드의 크기를 제한하고 싶습니다.다음과 같은 속성으로 쉽게 작업할 수 있습니다.

spring:
    servlet:
        multipart:
            max-file-size: 2MB
            max-request-size: 2MB

하지만 예외를 던지는 Tomcat이기 때문에 Spring이 잡을 수 없는 500점을 항상 받고 요청이 Rest Controller의 내 코드에 도달하지 않습니다.

2019-03-02 10:12:50.544 ERROR [] [   o.a.c.c.C.[.[.[/].[dispatcherServlet]] [] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3917946) exceeds the configured maximum (2097152)] with root cause 
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3917946) exceeds the configured maximum (2097152)

My ExceptionHandler는 이와 같으나 주석에 포함된 예외가 무엇이든 작동하지 않습니다.

@ExceptionHandler(MaxUploadSizeExceededException.class)
public ResponseEntity handleMaxSizeException(Exception e) {
    logger.warn(e.getMessage());
    ...
    return status(HttpStatus.PAYLOAD_TOO_LARGE).body(...);
}

이미 언급한 속성으로 시도했지만 아무런 효과가 없었습니다.

@Bean
public TomcatServletWebServerFactory containerFactory() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> 
        ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1));
    return factory;
}

다음 질문(및 기타...)에서 이미 답을 확인했지만 대부분이 구식이거나 단순히 작동하지 않습니다.

누군가가 이것 때문에 힘들어하나요?

이것을 당신의 것에 추가해 주세요.application.properties:

spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB

위의 구성에서 필요에 따라 크기를 변경할 수 있습니다.

조금 늦었습니다.application.properties 또는 application.yml에 설정해야 합니다.server.tomcat.max-swallow-size=-1it tomcat을 사용하면 업로드 요청에 간섭하지 않고 봄까지 작업이 완전히 처리되고 예외 컨트롤러가 완벽하게 작동합니다.레퍼런스

비슷한 문제를 겪고 있었습니다.Tomcat은 글로벌 web.xml에서 기본 설정을 사용했는데도 요청이 구성된 최대값(2097152)을 초과한다고 계속 불평했습니다.

      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>

마침내 알게 되었습니다. 제가 개발 중인 서블릿 클래스는 @MultipartConfig 주석이 있는 서블릿 클래스를 확장하지만, 제 로컬 클래스는 @MultipartConfig 주석이 없습니다.따라서 요청이 다중 부분으로 처리되지 않아 이 오류가 발생했습니다.

오류가 발생한 코드는 다음 행의 슈퍼 클래스에 있습니다.

//Search through the parts for an uploaded file
for (Part part : request.getParts()) {

언급URL : https://stackoverflow.com/questions/54958189/spring-boot-multipart-file-maximum-upload-size-exception

반응형