본문 바로가기

프로그래밍/JSP

단일 파일 업로드 소스


파일을 업로드 하기 위해서는

cos.jar 파일이 필요하다. 여기서 http://servlets.com/cos/

"cos-26Dec2008.zip" 파일을 다운로드하고 cos.jar 파일을

톰켓홈.../common/lib (또는 그냥 lib폴더) 폴더와

톰켓홈.../webapps/.../WEB-INF/lib 폴더에 넣는다.

 

cos.jar파일이 있으면

enctype="multipart/form-data"로 넘어오는 파라미터에 대한 이름과 값을 얻어낼수 있다.

 

파일 업로드 폼

========= fileUploadForm.jsp =========

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
 <head>
  <title>파일 업로드 테스트</title>
 </head>
 <body>
  <form method="post" action="fileUploadPro.jsp" enctype="multipart/form-data">
   <input type="file" name="uploadFile" size="50" />
   <input type="submit" value="전송" />
  </form>
 </body>
</html>

======================================

 

업로드 처리파일

========= fileUploadPro.jsp =========

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%
 request.setCharacterEncoding("euc-kr");
 String realFolder = "";
 String saveFolder = "fileUpload/saveFile"; // 업로드 폴더지정
 String encType = "euc-kr"; // 인코딩 타입
 int maxSize = 5*1024*1024; // 최대 업로드될 파일 크기 5MB
 ServletContext context = getServletContext();
 realFolder = context.getRealPath(saveFolder); // 서버상에 절대경로
 out.print("the realpath is : "+realFolder+"<br />");
 
 try{
  MultipartRequest multi = null;
  // 전송을 담당할 컴포넌트를 생서하고 파일을 전송함
  // 전송할 파일명을 가지는 객체,서버상의 절대경로,초대 업로드될 파일크기,문자코드,기본보안적용
  multi = new MultipartRequest(request,realFolder,maxSize,encType,new DefaultFileRenamePolicy());
  Enumeration params = multi.getParameterNames(); // 폼의 파라미터 목록을 가져온다.
  // 파라미터를 출력한다.
  while(params.hasMoreElements()){
   String name = (String)params.nextElement(); // 전송되는 파라미터 이름
   String value = multi.getParameter(name); // 전송되는 파라미터 값
   out.print(name+"="+value+"<br />");
  }
  out.print("-------------------<br />");
  Enumeration files = multi.getFileNames(); // 전송할 파일정보
  // 파일정보가 있다면 실행
  while(files.hasMoreElements()){
   String name = (String)files.nextElement(); // input 태그 속성이 file인 name값
   String filename = multi.getFilesystemName(name); // 서버에 저장된 파일 이름
   String original = multi.getOriginalFileName(name); // 원래 파일 이름
   String type = multi.getContentType(name); // 전송된 파일의 내용 타입
   File file = multi.getFile(name); // 파일 객체 생성
   out.print("파라미터 이름 : "+name+"<br />");
   out.print("실제파일 이름 : "+original+"<br />");
   out.print("저장된파일 이름 : "+filename+"<br />");
   out.print("파일 타입 : "+type+"<br />");
   if(file != null){
    out.print("크기 : "+file.length());
    out.print("<br />");
   }
  }
 }catch(IOException e){
  System.out.print(e);
 }catch(Exception e){
  System.out.print(e);
 }
%>

======================================