MultipartResolver
의 구현체인 CommonsMultipartResolver
를 사용하라고 명시하고 있었다. 코드는 다음과 같다.CommonsMultipartResolver
를 사용하지 않아도 문제없이 업로드가 되는 것을 코드 적당히 짜보고 확인했다.CommonsMultipartResolver
를 사용할 필요가 없다. Springboot를 사용하지 않는경우에만 본인이 세팅해주는 것.MultipartAutoConfiguration
소스코드CommonMultipartResolver
- Apache Commons FileUploadStandardServletMultipartResolver
- servlet 3.0+ part APIDispatcherServlet
이 빈으로 등록된 MultipartResolver
의 인스턴스를 체크한다.(DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME
을 통해). 이때 스프링의 경우 default bean이 등록되어있지 않으므로 MultipartResolver
의 구현체를 직접 등록해줘야 함.DispatcherServlet.doDispatch()
는 요청이 파일 업로드에 관한것인지 MultipartResolver.isMultipart()
함수를 호출해서 확인한다.MultipartResolver.resolveMultipart()
호출해서 HTTP 요청을 파싱하고, MultipartHttpSErvletRequest
object로 감싸서 반환한다. 이 시점에서 Lazy
option을 걸지 않는이상 이미 파일 컨텐츠는 메모리 또는 임시 폴더에 저장되어 있음. -> Lazy 옵션 거는거 공식문서에 나와있습니당.DispatcherServlet.doDispatch()
의 마지막 차례에 MultipartResolver.cleanupMultipart()
가 호출되어 업로드된 파일의 저장소와 같은 multipart 처리를 위해 사용된 리소스들을 정리한다.https://stackoverflow.com/questions/31178160/spring-boot-doesnt-use-commonsmultipartresolver
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
https://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/multipart-resolver.html
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html