본문 바로가기

Dev.BackEnd/Spring & Spring Boot

[spring boot] multipart타입으로 파일업로드를 할 때 파일사이즈로 인한 오류 해결방법

 

content-type을 multipart로 파일업로드를 구현하고 파일업로드에 문제가 없었는데 어늘 갑자기 에러가 발생했다.

 


"org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.\r\n\tat org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:124)\r\n\tat org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:115)\r\n\tat org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init> ..생략"

파일사이즈 문제가 나오길래 지금 등록하려는 파일사이즈를 확인해보니 평소에는 kb를 등록한것이지만 이번에 등록한건 1.14mb이다. 그렇게 크지도 않은데 에러가 발생했다.

 

오류 해석

1048576 bytes는 약 1MB로 용량 설정을 하지 않았을 때의 디폴트 값이라 그 이상을 업로드 하려면 따로 설정을 해줘야 한다.

api에 접근하지도 못하는걸로 봐선 springboot에서 기본적으로 1MB이상은 막아놓듯 하다.

 

해결방법

application.properties 또는 yml에서 설정을 할 수 있고 나 처럼 springmvcconfiguration에서 설정하는 방법이 있는데 나는 후자로 설정했다.

 

@Configuration
public class SpringMvcConfiguration implements WebMvcConfigurer {
/**
* Max FileSize 4mb
* @return
*/
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setMaxUploadSize(1024 * 1024  * 4);
return resolver;
}

 

파일사이즈 읽는 법

각 데이터 크기는 1024의 제곱으로 표현

1,024Byte는 1KB

1MB는 1,024KB이므로 1,024Byte(1KB)가 1024번 곱해진다고 생각하면 편합니다.

 

이렇게 등록을 했지만 

 

오류발생: 
Error creating bean with name 'multipartResolver' defined in class path resource 에러발생

해석:
빈 생성 실패 오류로 인한 multipartResolver사용 금지

 

해결방법

pom.xml에 fileupload 빈 등록하기

 

스프링에서 Multipart 기능을 사용하기 위해 MultipartResolver를 등록해주어야 한다. 

MultipartResolver는 CommmnosMultipartResolver 클래스를 빈으로 등록하여 사용한다.

 

CommmnsMultipartResolver클래스는 CommonsFileUpload API를 이용하는데, CommonsFileUpload API를 찾을 수 없어서 발생하는 오류이다.

 

pom.xml

<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>