[파일업로드 에러 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) {

	...
}