programing

"그 요청은 크기 때문에 거절되었습니다." 스프링, 톰캣

css3 2023. 9. 2. 08:44

"그 요청은 크기 때문에 거절되었습니다." 스프링, 톰캣

스프링부트로 간단한 업로드 앱을 만들려고 하는데 10Mb+ 파일을 업로드하려고 할 때까지 정상적으로 작동합니다. 화면에 다음 메시지가 표시됩니다.

There was an unexpected error (type=Internal Server Error, status=500).
Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (14326061) exceeds the configured maximum (10485760)

저는 조사를 좀 해봤지만, 지금까지 효과가 없었습니다.제가 지금까지 시도했던 것들을 아래에 두겠습니다.

이 코드를 (다양한 방식으로) 내 "application.yml"에 넣으십시오.

multipart: 
 maxFileSize: 51200KB
 maxRequestFile: 51200KB  

저는 또한 이것을 교장 선생님 수업에서 시도해 보았습니다.

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

그리고 이상한 것.my tomcat web.xml에 입력하면 multipart-config는 다음과 같습니다.

<multipart-config>
      <!-- 50MB max -->
      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>

그렇다면 이 "...구성된 최대값(10485760)"은 대체 어디서 나온 것입니까? (부록:netbeans 8.1과 spring boot 1.5)를 사용하고 있습니다.

Thx 여러분.(그리고 영어 s2는 미안합니다)

요청한 이후로, 이것은 나의 애플리케이션입니다.yml

 server:
      port: 9999
      context-path: /client
    logging:
      level:
        org.springframework.security: DEBUG
    endpoints:
      trace:
        sensitive: false

    spring:
        thymeleaf:
            cache: false
        multipart: 
          maxFileSize: 51200KB
          maxRequestFile: 51200KB  

    #################################################################################

    security:
      basic:
        enabled: false
      oauth2:
        client:
          client-id: acme2
          client-secret: acmesecret2
          access-token-uri: http://localhost:8080/oauth/token
          user-authorization-uri: http://localhost:8080/oauth/authorize
        resource:
          user-info-uri: http://localhost:8080/me
    #    
spring:
  http:
    multipart:
      enabled: true
      max-file-size: 50MB
      max-request-size: 50MB

또는

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

여기서 참조

효과가 있기를 바랍니다.

버전에 따른 방법은 다음과 같습니다.

1분의 1:

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

2초:

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

3분의 1:

multipart.enabled=true
multipart.max-file-size=100MB
multipart.max-request-size=100MB

SpringBoot 1.5.7 ~ 2.1.2의 경우 application.properties 파일에서 설정해야 하는 속성은 다음과 같습니다.

spring.http.multipart.max-file-size=100MB
spring.http.multipart.max-request-size=100MB

또한 "resources" 폴더에 application.properties 파일이 있는지 확인합니다.

spring:
  servlet: 
    multipart: 
       enabled: true 
       file-size-threshold: 200KB   
       max-file-size:       500MB 
       max-request-size:    500MB

SpringBoot 2.6.3에서 "spring.http.multipart.max-file-size" 설정이 작동하지 않았습니다.다음은 저에게 효과가 있었습니다.

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

Commons Multipart Resolver를 구성하기 위해 빈 이름을 MultipartFilter로 정의합니다.DEFAULT_MULTIPART_RESOLVER_BEAN_NAME 기본 스프링 부트의 기본 MultipartFilter는 기본 빈 이름을 가진 해결 프로그램을 찾습니다.

@Bean(name = MultipartFilter.DEFAULT_MULTIPART_RESOLVER_BEAN_NAME)
protected MultipartResolver getMultipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(20971520);
    multipartResolver.setMaxInMemorySize(20971520);
    return multipartResolver;
}

저도 이 문제가 있었는데 application.properties의 spring.http.multipart.max-file-size=20MB 및 spring.http.multipart.max-request-size=20MB 속성 설정이 작동하지 않는 이유를 모르겠습니다.최대 파일 크기를 변경하려면 이 가이드를 따릅니다. https://www.baeldung.com/spring-maxuploadsizeexceeded

그래서 저는 이것을 교장 선생님 수업에 추가했습니다.

@Bean
public MultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver
      = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(20000000);
    return multipartResolver;
}

그런 다음 MaxUploadSize를 처리합니다.초과됨예외, 복사했습니다.

@ControllerAdvice
public class FileUploadExceptionAdvice {
     
    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public ModelAndView handleMaxSizeException(
      MaxUploadSizeExceededException exc, 
      HttpServletRequest request,
      HttpServletResponse response) {
 
        ModelAndView modelAndView = new ModelAndView("file");
        modelAndView.getModel().put("message", "File too large!");
        return modelAndView;
    }
}

그리고 다음과 같은 간단한 file.dll 템플릿을 작성했습니다.

<!DOCTYPE html>
<html lang="en"
      xmlns:th="http://www.thymeleaf.org"
>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3 th:text="${message}"></h3>
</body>
</html>

이 코드를 추가한 후 로그에서 MaxUploadSize를 확인했습니다.초과됨예외 오류가 처리되었지만 브라우저에서 오류가 발생했습니다.솔루션에서 application.properties에 다음을 추가했습니다.

server.tomcat.max-swallow-size=60MB

튜토리얼의 예: https://www.youtube.com/watch?v=ZZMcg6LHC2k

언급URL : https://stackoverflow.com/questions/49304767/the-request-was-rejected-because-its-size-spring-tomcat