예전에, 아주 먼 옛날에 JSP 로 작업하면서 파일 업로드 때문에 고생했던 기억이 있습니다. 하지만 이제는 너무 너무 쉽더군요.
해결 방법은 Filter 를 이용하는 것입니다. 해당 코드는 아래에서 확인하실 수 있습니다.
http://jetty.mortbay.org/xref/org/mortbay/servlet/MultiPartFilter.html
전에 위의 코드에서 일부분을 추려서 Standalone 서버에서 돌린 적이 있었는데 이번에는 이것을 Tomcat 에 붙여보았습니다. 그러기 위해서는 몇개의 관련 파일들을 함께 가져와야 합니다.
컴파일을 하고, web.xml 에 해당 Filter 를 등록해주면 준비는 모두 끝납니다.
저의 web.xml 화일의 일부입니다.
<filter>
<filter-name>MultiPartUploadFilter</filter-name>
<filter-class>org.mortbay.servlet.MultiPartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MultiPartUploadFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-name>MultiPartUploadFilter</filter-name>
<filter-class>org.mortbay.servlet.MultiPartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MultiPartUploadFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
너무 당연하다시피 필터를 정의하고, url 을 매핑해주는 것입니다.
소스코드를 확인해보시면 아시겠지만, 컨텐트 타입이 "multipart/form-data" 로 시작하는 경우 해당 필터가 작동하도록 되는 것입니다.
필터가 제대로 동작하게 되면, 서블릿쪽에서의 작업이 매우 간편해집니다.
위의 필터는 파일을 전송받아 임시 디렉토리에 저장한 뒤, 파일에 대한 내용을 request 의 attribute 로 설정하게 됩니다. 이때 attribute 의 이름은 input 태그의 name 이 됩니다.
만약 <input type="file" name="uploadfile1"> 으로 Form 을 사용한 경우,
request.getAttribute("uploadfile1") 을 통해 해당 파일의 정보를 알 수 있습니다.
또한 원래 파일의 이름은
request.getParameter("uploadfile1") 으로 구하실 수 있습니다.
너무 간단하지 않나요? ^^
댓글을 달아 주세요