programing

스프링 업로드 파일 크기 제한 오류

magicmemo 2023. 6. 25. 18:38
반응형

스프링 업로드 파일 크기 제한 오류

Spring Boot을 사용하고 있으며 1MB보다 작은 이미지를 보낼 수 있지만 1MB보다 큰 이미지로 게시 요청을 하면 다음 오류가 발생합니다.

Maximum upload size exceeded; nested exception is java.lang.IllegalStateException:org.apache.tomcat.util.
http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.

저는 이 오류에 대한 답을 찾기 위해 너무 많은 곳을 둘러보았습니다.저는 이 모든 질문들을 살펴보았고 그들이 제안하는 것을 실행하려고 노력했지만 소용이 없었습니다.봄 업로드 파일 크기 제한입니다. maxFileSize를 설정하려고 하지만 org.apache.tomcat.util.http.fileUpoad허용되지 않습니다.FileUploadBase$파일 크기 제한초과됨스프링 부팅 시 멀티파트 파일의 예외 및 최대 제한

Spring 버전 2.0.3을 사용하고 있으며 다음은 포스트 매핑입니다.

    @PostMapping("/post")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
      String message = "";
      try {
        storageService.store(file);
        files.add(file.getOriginalFilename());

        message = "You successfully uploaded " + file.getOriginalFilename() + "!";
        return ResponseEntity.status(HttpStatus.OK).body(message);
      } catch (Exception e) {
      message = "FAIL to upload " + file.getOriginalFilename() + "!";
      return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(message);
  }

}

다음은 제가 시도한 모든 application.properties 구성입니다.

1

spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1

2

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

3

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

4

multipart.max-file-size=5MB
multipart.max-request-size=5MB

5

server.tomcat.max-file-size=5000000

6

server.tomcat.max-http-post-size=5000000

7

spring.servlet.multipart.maxFileSize=-1
spring.servlet.multipart.maxRequestSize=-1

application으로 변경하려고 시도하기도 했습니다.yml:

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

web.xml 파일에서 Tomcat이 허용하는 요청 크기를 변경하는 것도 알아봤지만 web.xml 파일이 없습니다.내가 사용하고 있는 Tomcat은 앱에 번들로 포함되어 있습니다.

Spring Boot 버전 2.0.0.REASE 이상application.properties에 다음 행을 추가합니다.

spring.servlet.multipart.max-file-size=128MB
spring.servlet.multipart.max-request-size=128MB
spring.servlet.multipart.enabled=true

버전이 낮은 경우(예: 1.5.9.REASE 및 이하의 구성은 다음과 같습니다.

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

최신 스프링 부트에 따라 아래의 공통 속성이 작동해야 합니다.

다중 부품(다중 부품 속성)

spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0 # Threshold after which files are written to disk. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.max-request-size=10MB # Max request size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.

또는 다중 부분 속성을 제어하려는 경우multipart.max-file-size그리고.multipart.max-request-size속성이 작동해야 합니다.

multipart.max-file-size=5MB
multipart.max-request-size=5MB

Spring boot Version(예: 1.X)에 따라 application.properties에 따라 파일 크기 제한을 설정합니다.

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

스프링 부트 2.x/이상:

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

이것이 바로 제가 가지고 있는 것이며 백엔드에 완벽하게 적합합니다.

@PutMapping(value = USER_PROFILE_UPDATE_URL_MAPPING)
  public String updateProfile(
      @ModelAttribute(AUTHORIZED_USER_MODEL_KEY) User user,
      BindingResult bindingResult,
      @RequestParam(name = "file") MultipartFile multipartFile,
      Model model, @RequestParam Map<String, String> params) {

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    User authorizedUser = (User) authentication.getPrincipal();
    //.... 

      return REDIRECT_TO_LOGIN;
    }

그리고 bootstrap.yml 파일에서, 저는 간단하게 이런 것을 가질 것입니다...최대 파일 크기는 2MB만 허용됩니다.

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

그리고 마지막으로, 제 HTML 파일에, 저는 이런 것을 가질 것입니다.

<form id="profileForm"
   th:action="@{/update}"
   th:object="${user}"
   method="post" enctype="multipart/form-data">

   <!-- This will modify the method to PUT to match backend -->
   <input type="hidden" name="_method" value="PUT">

   ...

   <div class="col-md-3">
      <div class="form-group row">
         <label for="file" class="custom-file">
           <input name="file" type="file" id="file" aria-describedby="fileHelpId"  class="form-control-file btn btn-outline-info">
          </label>
          <small id="fileHelpId" class="form-text text-muted">Maximum size should be 2MB</small>
       </div>
   </div>

그리고 이것은 완벽하게 잘 작동할 것입니다.Spring Boot 2.0.3도 사용하고 있습니다.

이거 먹어봤어요?

spring.http.multipart.maxFileSize = 20MB
spring.http.multipart.maxRequestSize = 20MB

OR

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

Spring Boot 1.5.x와 함께 사용 가능

This worked for me.
We can make changes to file size either in
1. application.properties 2. TOMCAT configuration(server.xml)

A. Ideally we should make use of application.properties 
B. And for that first we need to disable in TOMCAT config file "server.xml" by setting maxSwallowSize=-1 .

    <Connector port="8080" protocol="HTTP/1.1"
      connectionTimeout="20000"
      redirectPort="8443"
      maxSwallowSize = "-1"/>

C. Then set application.properties as

spring.servlet.multipart.max-file-size=15MB
spring.servlet.multipart.max-request-size=15MB
spring.servlet.multipart.enabled=true

참조하다org.springframework.boot.autoconfigure.web.MutltipartProperties속성을 설정할 때 사용할 접두사를 이해하는 클래스입니다.위의 모든 명명 규칙은 다양한 버전의 스프링 프레임워크에 적용됩니다.

언급URL : https://stackoverflow.com/questions/51410540/spring-upload-file-size-limit-error

반응형