[파일업로드 에러 500/MultipartException]Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided 해결
2019. 8. 1. 10:34ㆍ에러해결법
스프링에서 파일업로드와 관련된 코드를 넣을때 다음과 같은 에러가 뜰때가 있다.
Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
Filter의 ServletRequest에서 그 페이지의 값들을 받아오지 못하는 것을 알 수 있습니다.
많은 블로거들에서 기본적으로 제공하는 해결법이 있지만 이마저도 안통할때가 있는데
본인은 삽질 끝에 해결법을 알아냈다.
Tomcat 설정단에 context.xml에 다음과 같은 구문을 추가합니다.
※ <context>태그 안에 잘 넣었는지 확인하자.
<?xml version="1.0" encoding="UTF-8"?>
<Context allowCasualMultipartParsing="true" path="/">
<Resources cachingAllowed="true" cacheMaxSize="100000" />
</Context>
위의 구문을 추가하고 restart를 해주었을 시 정상으로 돌아가는 것을 확인할 수 있다.
위의 구문의 경우 캐시의 맥시멈사이즈까지 줬지만
<Context allowCasualMultipartParsing="true">만 기입해도 잘 돌아간다.
기본 해결법
[1] form의 enctype
<form name="frm" method="post" enctype="multipart/form-data">
[2] bean 미등록
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
본인은 위에까지만 했을때 정상적으로 잘 작동한다 .
아래는 위에까지 적용했는데도 불구하고 돌아가지 않을때의 처리 방법이다.
[3] web.xml filter 미등록
<filter>
<filter-name>MultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MultipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
[4] Controller mapping
@RequestMapping(value = "/mainUpload", method= RequestMethod.POST,
headers = ("content-type=multipart/*"))
public ModelAndView createInfo( @RequestParam("mediaFile") MultipartFile mediaFile) {
...
}