파일 업로드를 하거나 폼 데이터를 분석하는 컴포넌트인 cos.jar 파일을 이용하여 만들어보았습니다~
먼저 www.servlets.com 사이트에접속하시면 왼쪽에 com.oreilly.servlet 로 들어갑니다.
아래로 내려 보시면 Download 가 있고 cos-26Dec2008.zip 파일이 있습니다~ 다운~
톰캣이 깔린 디렉토리의 common\lib 에 넣습니다. (저의 경우 bin\Tomcat 5.0\common\lib 로 되어 있군요.)
이제 다운 받을 새로운 폴더를 하나 만들어 줍니다. 저의 경우 saveFile로 만들었습니다. (귀찮으면 소스에서 그냥 C:\로 해주면 C:로 다운이 됩니다.)
먼저 전송을 담당할 view 화면 입니다.
파일의 이름을 fileuploadform.jsp 로 했습니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>cos 업로드 테스트 폼</title>
</head>
<body>
<form method="post" action="upload.do" enctype="multipart/form-data">
작성자:
<input type="text" name="user"><br>
제 목:
<input type="text" name="title"><br>
파일명:
<input type="file" name="uploadFile"><br>
<input type="submit" value="파일 올리기"><br>
</form>
</body>
</html>
서블릿을 사용하기 위해서 web.xml을 수정합니다.
<!-- upload 페이지 -->
<servlet>
<servlet-name>uploadServlet</servlet-name>
<servlet-class>upload.upload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uploadServlet</servlet-name>
<url-pattern>/upload.do</url-pattern>
</servlet-mapping>
<!-- upload 페이지 -->
다음은 서블릿을 만듭니다. 여기선 upload 패키지의 upload.java로 되어 있습니다.
package upload;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class upload extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
RequestDispatcher rd = null;
String fileName = "";
File file = null;
String savePath = "C:/workspace/my/saveFile"; //<- 요기를 바꿔주면 다운받는 경로가 바뀝니다.
Enumeration files = null;
int maxSize = 5 * 1024 * 1024; // 최대 업로드 파일 크기 5MB(메가)로 제한
try {
MultipartRequest multi = new MultipartRequest(request,
savePath, maxSize, "euc-kr", new DefaultFileRenamePolicy());
fileName = multi.getFilesystemName("uploadFile"); // 파일의 이름 얻기
files = multi.getFileNames();
String name = (String)files.nextElement();
file = multi.getFile(name);
if (fileName == null) { // 파일이 업로드 되지 않았을때
System.out.print("파일 업로드 되지 않았음");
} else { // 파일이 업로드 되었을때
System.out.println("User Name : " + multi.getParameter("user"));
System.out.println("File Name : " + fileName);
}//else
} catch (Exception e) {
System.out.print("예외 발생 : " + e);
}//catch
rd = getServletContext().getRequestDispatcher("/uploadfileview.jsp?fileName="+ fileName +"&filelength="+file.length());
rd.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
}
마지막으로 다운이 완료된후 보여줄 화면입니다.
서블릿에서 보이듯이 파일명은 uploadfileview.jsp 입니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String fileName = request.getParameter("fileName");
String filelength = request.getParameter("filelength");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
파일 이름 : <%= fileName%> <br>
용량 : <%= filelength%>KB
</body>
</html>
이제 uploadfileview.jsp로 실행해서 들어가 보시면
파일명에서 찾아보기로 파일을 선택하고 파일올리기 버튼을 눌르면 결과 창이 나옵니다.~
이클립스에서 파일이 다운 되엇는지 확인할려면 F5키를 눌러서 새로고침을 해야 보입니다.
결과 화면에서 파일이름과 용량이 표시되도록 하였습니다.^-^
사실 어려울거라 생각햇는데 오히려 cos.jar파일을 이용하니 간단하게 파일 업로드가 완성되엇습니다^-^
- 근데...다운은 어떻게 하는거지;;ㅡ,.ㅡ;; ㅋㅋㅋㅋ
'web > JSP' 카테고리의 다른 글
jsp 다중 파일업로드 (4) | 2010.11.11 |
---|---|
jsp text box 동적 추가 삭제 파라미터로 넘기기! (1) | 2010.11.10 |
JSP java.lang.NullPointerException (0) | 2010.11.08 |
JSP Statement PreparedStatement (0) | 2010.11.03 |
JSP JFreeChart 사용하기 - PIE (5) | 2010.11.02 |