IT 전용글/JSP

JSP 멀티 업로드

회상형인간 2009. 2. 10. 23:03

HTML에서는 다중파일 선택이 되지 않는다.
이를 해결하기 위해 Harald Kirschner씨는 Flash와 prototype기반으로 다중파일 업로드
기능을 구현하셨다... 나는 이를 JSP에 적용해 보기로 했다.

개발환경은 다음과 같이 진행했다.
JSP Engine : Jetty 5.1
Upload Lib  : org.apache.commons.fileupload

1. FancyUpload PKG 다운로드
   아래 URL에서 PKG를 다운로드 받을 수 있다.
   http://wiki.firejune.com/FancyUpload/FancyUpload

   PKG내에는 각종 파일과 php파일 swf파일이 있다.
   문제는 이넘의 php를 JSP로 변경하는 부분이다.

2. JSP Code (upload.php -> upload.jsp 로 변경)
 <%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="java.io.File" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

    <center><table border="2">
        <tr><td><h1>Your files  uploaded </h1></td></tr>
<%
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    if(!isMultipart) {
    }else {
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        List items = null;
        
        try {
            items = upload.parseRequest(request);
        }catch (FileUploadException e) {
            System.err.println("Item get error : " + e.toString());
            e.printStackTrace();
        }
        Iterator itr = items.iterator();
        while (itr.hasNext()) {
            FileItem item = (FileItem) itr.next();
            if(item.isFormField()) {
            }else {
                try {
                    String itemName = item.getName();
                    
                    System.out.println(itemName);
                    
                    File savedFile = new File(itemName);
                    System.out.println(savedFile.getName());
                    
                    File upFile = new File("D:\\temp\\" + savedFile.getName());
                    
                    item.write(upFile);
        
                    out.println("<tr><td><b>Your file has been saved at the loaction: "
                                + "</b></td></tr><tr><td><b>uploadedFiles "
                                + "\\" + itemName + "</td></tr>");
                }catch(Exception e) {
                    System.err.println("Write : " + e.toString());
                    e.printStackTrace();
                }
            }
        }
    }
%>
</table>
</center>

AJAX로 처리되기 때문에 화면에 표시되지는 않는다.
확인해보고 몇몇가지를 변경적용하면 된다.

3. 한글 처리문제 해결
   - SWF 에서 넘어오는 파일명은 UTF-8로 되어있다.
     이 문제때문에 하루 꼬박 고민한거 같다.
   - 해답 :
     request.setCharacterEncoding("utf-8"); // utf-8로 맞춰준다.
     itemName = new String(itemName.getBytes("euc-kr")); // 한글 변환 작업 진행
 

'IT 전용글 > JSP' 카테고리의 다른 글

JAVA WebEditor FCK  (0) 2009.03.03
Transaction 참고 소스..  (0) 2009.02.13
Exception 처리 방식  (0) 2009.01.30
CustomTag (Not Struts CustomTag) 설정방법.  (0) 2009.01.30
국제화 .  (0) 2009.01.30