728x90
반응형
개요
"최범균의 JSP 2.0 프로그래밍" 이라는 책의 내용중 파일업로드 하는 부분이 나오는데, 해당 라이브러리의 버전이 오래된 것이어서 테스트에 약간의 문제가 있었습니다. 이에 최신 버전으로 테스트할 수 있는 예제 소스를 정리해보았습니다. Java의 파일 업로드 모듈로 많이 사용되는 Apache commons fileUpload 의 최신 버전은 2008년 12월 31일 현재 1.2.1 입니다.또한, FileUpload 는 commons-io 1.3.2 에 의존적입니다.예제
◎ fileUploadForm.jsp
<%@ page contentType="text/html; charset=utf-8" %> <html> <head><title>파일 업로드 폼</title></head> <body> <form action="processFileUpload.jsp" method="post" enctype="multipart/form-data"> 파일1: <input type="file" name="file1" /><br/> 파일2: <input type="file" name="file2" /><br/> 파일3: <input type="file" name="file3" /><br/> 파라미터1: <input type="text" name="param1" /><br/> 파라미터2: <input type="text" name="param2" /><br/> 파라미터3: <input type="text" name="param3" /><br/> <input type="submit" value="전송" /> </form> </body> </html>
◎ processFileUpload.jsp
<%@ page contentType="text/html; charset=utf-8" %> <%@ page import="org.apache.commons.fileupload.FileItem" %> <%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %> <%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %> <%@ page import="java.util.List" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.io.File" %> <%@ page import="java.io.BufferedInputStream" %> <%@ page import="java.io.BufferedOutputStream" %> <%@ page import="java.io.FileOutputStream" %> <%@ page import="java.io.IOException" %> <html> <head><title>파일 업로드 처리</title></head> <body> <% // Check that we have a file upload request boolean isMultipart = ServletFileUpload.isMultipartContent(request); if( isMultipart ) { File temporaryDir = new File("/tmp/"); // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(1024*100); factory.setRepository(temporaryDir); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(1024*1024); // Parse the request List /* FileItem */ items = upload.parseRequest(request); // Process the uploaded items Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem fileItem = (FileItem) iter.next(); if (fileItem.isFormField()) { // processFormField(fileItem); out.println("폼 파라미터 : " + fileItem.getFieldName() + "=" + fileItem.getString("utf-8") + "<br/>"); } else { // processUploadedFile(fileItem); out.println("파일 : " + fileItem.getFieldName() + "=<pre>" + fileItem.getString() + "</pre>(" + fileItem.getSize() + " bytes)<br/>"); // 업로드한 파일이 존재하는 경우 if( fileItem.getSize() > 0 ) { int idx = fileItem.getName().lastIndexOf("\\"); if( idx == -1 ) { idx = fileItem.getName().lastIndexOf("/"); } String fileName = fileItem.getName().substring(idx + 1); try { File uploadedFile = new File("/opt/project/jspstudy/web/chap16/data/", fileName); fileItem.write(uploadedFile); } catch(IOException ex) {} } } } } else { out.println("인코딩 타입이 multipart/form-data 가 아님."); } %> </body> </html>
저장하고자 하는 디렉토리는 바꾸어서 테스트해보시기 바랍니다.
이제 몇시간 후면 2009년이 되는군요. 내년도 건강하고 즐거운 한 해가 되시기 바랍니다.
728x90
반응형
'프로그래밍 > Java' 카테고리의 다른 글
기본 iBATIS 설정, 테스트 해보기 (0) | 2009.11.10 |
---|---|
스트럿츠2 (2.1.6) 배포시 주의할 것 (0) | 2009.03.20 |
FreeBSD 7.0 에 Java 설치하기 (0) | 2008.05.15 |
코드 조각 자동 포함 기능 (0) | 2008.04.19 |
The value for the useBean class attribute ~~~ is invalid 문제 해결 (0) | 2008.04.12 |