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 로 변경)
AJAX로 처리되기 때문에 화면에 표시되지는 않는다.
확인해보고 몇몇가지를 변경적용하면 된다.
3. 한글 처리문제 해결
- SWF 에서 넘어오는 파일명은 UTF-8로 되어있다.
이 문제때문에 하루 꼬박 고민한거 같다.
- 해답 :
request.setCharacterEncoding("utf-8"); // utf-8로 맞춰준다.
itemName = new String(itemName.getBytes("euc-kr")); // 한글 변환 작업 진행
이를 해결하기 위해 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")); // 한글 변환 작업 진행