본문 바로가기
Development/Web Develope

해법을 주마!!! java.io.IOException: Posted content type isn't multipart/form-data

by 버들도령 2019. 6. 14.
728x90

java.io.IOException: Posted content type isn't multipart/form-data


java.io.IOException: Posted content type isn't multipart/form-data

 at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:168)
 at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:223)
....
...
..
.

com.oreilly.servlet.MultipartRequest 를 사용하여 파일 업로드시에 위와 같은 오류가 발생한다면???
이유는 여러가지가 있을것이기에 해결 방법도 여러가지가 있을 수 있다.
일단.. 인터넷상에서 널리 알려진 해결 방법들을 나열해보면.

1. html 코딩시 "multipart/form-data"를 담는 form 태그가 tread, tbody, caption, summary 안에 넣으면 안된다고 웹접근성 지침서에 나와있다고 한다.
<tbody>
     <form id="fileUpload" enctype="multipart/form-data" method="post">
      .....
     </form>
</tbody>

이렇게 된 것을... 아래와 같이 수정해보고, 테스트하여 IOException 이 발생하지 않는지 체크해보면 되겠죠.
<tbody>.....
</tbody>

<form id="fileUpload" enctype="multipart/form-data" method="post">
.....
</form>

2. 파일을 업로드하기 위한 form내에 enctype="multipart/form-data" method="post" 이 반드시 정의되어 있어야 한다는 것이죠.
또한 form 태그 내부에 input type='file' 도 정의가 되어있어야 하고요.
아래처럼...
<form id="fileUpload" enctype="multipart/form-data" method="post">
    <input type="file" ...>
     .....
</form>

3. 마지막으로 제일 당연한 것!!!
에러의 내용 그대로.  Post된 content type이 "multipart/form-data"이 아니라는 것이 요지이다.
com.oreilly.servlet.MultipartRequest 클래스를 사용하려면 Content Type이 "multipart/form-data" 이어야 하므로 이에 대한 확인을 거쳐주면 된다.

이렇게...
MultipartRequest mReq = null;
  
  System.out.println("request getContentType : " + request.getContentType());
// ---> request getContentType : multipart/form-data; boundary=----WebKitFormBoundaryQCnDTHQWMsW1AOTC
  try {
    if (-1 < request.getContentType().indexOf("multipart/form-data")) {
     mReq = new MultipartRequest(req, 
       properties.getString("mpps.admin.temp.real.path"),
       1024*1024*1, 
       "UTF-8", 
       new DefaultFileRenamePolicy());
.
.
.
      } // end if
   } catch (IOException ie) {
    ie.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   }

728x90

댓글