본문 바로가기
Programming/Java_Spring

Multipart 전송 시, Exception이 발생할 때. (with Tomcat 9.0)

by 곰네Zip 2023. 1. 5.

 multipart로 data전송 시, Exception이 발생하였다.

 StandardMultipartHttpServetRequest.handleParseFailure가 에러를 던져주었다.

no multi-part configuration이라고. 이거는 뭐지??? 했는데

context.xml이 필요하고, context.xml에 설정이 들어가야하더라.

 (이거 Tomcat 8.x에서 해결법이라는데 9.0.65에서도 동일한 증상이 발생했고, 해결법도 같았다. 제가 잘못 알고 있는거면 댓글로 가르쳐주세요. 꼭....)

 그 설정은 아래와 같다.

<Context allowCasualMultipartParsing="true" path="/">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
</Context>

 여기서 allowCasualMultipartParsing="true"만 넣어줘도 되긴 했음.

 뱀발) 나의 경우 로컬에서는 잘 되었는데.. 이상하게 서버에서는 반영이 안되고 계속 오류를 내뱉었다. 왜??? 이유가 뭘까? 했는데.. -_-.. catalina.base가 다른경로였던것..
 catalina.base아래에 conf폴더를 만들고, 해당 폴더 안에 context.xml을 위치시키니까 해결되었다. 만약 저 설정을 했는데도 계속 multipart config오류가 나면 내 톰캣의 실행 환경변수를 점검해보자...

이제 파일 올리면? 잘된다!

파일 첨부 안하면? 잘된다!!

파일 2메가 이상을 올리면? exception난다!!!!

톰캣에서 default post size가 2,097,152이다. 이걸 넘어서는 multipart 데이터는 톰캣이 사이즈 넘었다고 오류 뱉어버린다.

이거는 conf/server.xml을 찾아보자. (톰캣이 먼저 막아버리는 경우니까.. 자바쪽에서 아무리 사이즈 리밋 풀어봐야 안된다. 외부에서 요청이 들어오는걸 가장 먼저 받는녀석이 누구인지 생각해보면..)

..
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
				maxPostSize="220000000"			   />

위 설정에서 maxPostSize = "원하는 값" 설정해주면 된다. 근데 maxPostSize이니까.. 딱 파일크기만 하면 곤란하다. 여유있게 잡아주자.  파일크기는 다른데서 검사하고.

반응형

댓글