JSP 파일 업로드
[개요]
"최범균의 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년이 되는군요. 내년도 건강하고 즐거운 한 해가 되시기 바랍니다.
"최범균의 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년이 되는군요. 내년도 건강하고 즐거운 한 해가 되시기 바랍니다.
댓글
댓글 쓰기