form enctype="multipart/form-data"

2010. 4. 8. 21:14plming/HTML-Web

일반적으로 form 을 submit 하게되면,
form안의 element들이 id 나 name으로 submit된다.

submit을 받아 처리하는 action에 정의된 handler들에서는
request.getParameter( "xxx" ); 를 통해 값을 받게 되는데...


파일을 서버에 저장하기 위해서
<form enctype="multipart/form-data" ... 을 사용하게 된다.

하지만, 이때는...
submit을 받아 처리하는 action에 정의된 handler들에서는
request.getParameter( "xxx" ); 를 통해 값을 받을 수 없다...!!!

왜 값이 안넘어가는거야...ㅡㅡ;;;
아무리 울어도 소용이 없다.

그렇다...줄 넘(?)한테서 달라고 요구를 해야하는 것이었다...!!!!!!
그늠은 바로...
com.oreilly.servlet.MultipartRequest
요놈이다.

요놈을 요롷게 사용하면 좋다...

if( request.getContentType() != null && request.getContentType().indexOf("multipart/form-data") > -1 ) {
    String saveDirectory = config.getServletContext().getRealPath( uploadDir + "/education" );
    File dir = new File( saveDirectory );
    if( !dir.exists() ) dir.mkdir();

    int maxSize = 10 * 1024 * 1024;
    DefaultFileRenamePolicy dfrp = new DefaultFileRenamePolicy();

    MultipartRequest multi = new MultipartRequest( request, saveDirectory, maxSize, "euc-kr", dfrp );
    multi.getParameter( "xxx" );
}

MultipartRequest 를 사용하면
MultipartRequest 를 new 하는 순간에...
<input type="file" ... 로 정의 되어있는 파일들이 saveDirectory로 지정된 곳에 upload 된다.

파일이름이 같은 경우를 위해서는,
DefaultFileRenamePolicy 를 써주면 좋다.  (안써도 무방하다)
저장되는 파일명은 aaa.txt 가 2개라면...
두번째 파일은 aaa(1).txt로 저장된다.

저장되는 파일명과
보여줄 파일명이 다를테니...
DB에 저장할 때는...2개 다 저장하는 게 좋을 것 같다.


아~~~주 상세한 설명은 아래를  참고하시라~
"MultipartRequest를 이용하여 업로드구현하기":http://aboutjsp.com/lec/multipart.jsp