반응형

프론트에서 form 태그로 이미지 파일을 여러 개를 업로드하여 서버로 보내려고 하니, nested exception is java.lang.IllegalStateException : Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest] 이 에러가 발생했다. 이 문제의 원인은 jsp 적용 방법, Resolver 적용 방법, 라이브러리 추가 등을 확인해야 한다.


목차

1. 해결방법

1. 해결방법

이 문제의 해결방법은 정말 다양하다. 아래의 보기처럼 확인해야 하는 것을 기록한다.

 

1) 라이브러리 추가

파일 업로드를 위해 commons-fileupload.jar 파일을 라이브러리에 넣어놨는지 확인한다.

commons-fileupload.jar는 아래의 URL에서 다운로드할 수 있다.

URL : https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload

 

2) servlet.xml에 CommonsMultipartResolver 추가

servlet.xml에 MultipartResolver를 사용하기 위해 bean을 등록한다.

<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="maxUploadSize">
		<value>100000</value>
	</property>
	<property name="maxInMemorySize">
		<value>100000</value>
	</property>
</bean>

 

3) HTML form 태그 확인

아래의 코드에서 enctype을 multipart/form-data로 설정했는지 확인해야 한다.

<form action='/test/test01/testimg.data' enctype='multipart/form-data' id='imageUp' method="POST">
	<label for="imageup01" style="cursor: pointer;">사진 업로드</label>
	<input type='file' name='ImgFile' onchange='fileCheck();' id="imageup01" style="display:none" multiple="multiple"/>
	<input type='button' id='ImgSubmit' value='upload' onclick='fileisChk();' style="display:none"/>  
</form>

 

만약에, 위의 것을 ajax로 보내는 경우에는 enctype과 processData, contentType을 확인해야 한다.

$("#imageUp").ajaxSubmit({
	url : '/test/test01/testimg.data',
	type:'POST',
	async: false,
	enctype: 'multipart/form-data',
	processData: false,
	contentType: false
});

 

결과적으로 이 문제를 해결한 방법은 2번이다. 기존에 context.xml에 넣어놨는데, servlet에 넣어야 한다.


 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기