내장바구니 | 주문배송조회 | 내적립금
4만원 이상 무료배송
주문하시는
총상품금액의 합계가
4만원 이상일 경우
택배비가 무료입니다.
[자바파일업로드] Commons FileUpload 예제
작성자: 방장    작성일: 2009-08-27 21:49   조회: 79629   댓글: 4
-파일을 업로드 하려면 파일하나를 여러 파트로 나눠서(멀티파트) "POST" 방식으로 업로드 시킨다.
#주의사항
1.임시폴더(c://tmp)는 직접 만든다.
2.이클립스에서 webcontents 폴더 밑에 upload라는 폴더를 직접 생성해야 한다.
3.library파일을 2개 추가 해야한다.
    -commons-fileupload-1.2.1.jar
    -commons-io-1.4.jar

http://commons.apache.org/downloads/download_fileupload.cgi

http://commons.apache.org/downloads/download_io.cgi


<!--기본적인 FILE UPLOAD HTML FORM-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="upload.jsp" method="post" enctype="multipart/form-data">     //파일전송일 때는 항상 METHOD는 POST로 하고 ENCTYPE을
                                                                                                          //항상 주 어야 함
파일1: <input type="file" name="file1"/><br>                                             //TYPE은 FILE로 주어야 함!!
파일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>

<!--실제적인 데이터를 전달받기 위한 JSP 파일-->

-www.apach.org-> commons ->io,FileUpload 라이브러리를 다운 받아야 한다.

<%@ 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">
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="java.io.File"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="java.util.List"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.io.IOException"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);                   // multipart로 전송되었는가를 체크
 if (isMultipart) {                                                                                            // multipart로 전송 되었을 경우
  File temporaryDir = new File("c:\\tmp\\");                                                 //업로드 된 파일의 임시 저장 폴더를 설정
  String realDir = config.getServletContext().getRealPath("/upload/");                  //톰켓의 전체 경로를 가져오고 upload라는 폴더를 만들고 거기다
                                                                                                                  //tmp의 폴더의 전송된 파일을 upload 폴더로 카피 한다
.
  DiskFileItemFactory factory = new DiskFileItemFactory();                                   
  factory.setSizeThreshold(1 * 1024 * 1024);                                                      //1메가가 넘지 않으면 메모리에서 바로 사용
  factory.setRepository(temporaryDir);                                                               //1메가 이상이면 temporaryDir 경로 폴더로 이동
                   //실제 구현단계 아님 설정단계였음
  ServletFileUpload upload = new ServletFileUpload(factory);                              
  upload.setSizeMax(10 * 1024 * 1024);                                                             //최대 파일 크기(10M)
  List<FileItem> items = upload.parseRequest(request);                                      //실제 업로드 부분(이부분에서 파일이 생성된다)
  
  Iterator iter=items.iterator();                                                                            //Iterator 사용
  while(iter.hasNext()){
   FileItem fileItem = (FileItem) iter.next();                                                            //파일을 가져온다
   
   if(fileItem.isFormField()){                                                                               //업로드도니 파일이 text형태인지 다른 형태인지 체크
                                                                                                                    // text형태면 if문에 걸림
    out.println("폼 파라미터: "+ fileItem.getFieldName()+"="+fileItem.getString("euc-kr")+"<br>");
   }else{                                                                                                         //파일이면 이부분의 루틴을 탄다
    if(fileItem.getSize()>0){                                                                                 //파일이 업로드 되었나 안되었나 체크 size>0이면 업로드 성공
     String fieldName=fileItem.getFieldName();
     String fileName=fileItem.getName();
     String contentType=fileItem.getContentType();
     boolean isInMemory=fileItem.isInMemory();
     long sizeInBytes=fileItem.getSize();
     out.println("파일 [fieldName] : "+ fieldName +"<br/>");
     out.println("파일 [fileName] : "+ fileName +"<br/>");
     out.println("파일 [contentType] : "+ contentType +"<br/>");
     out.println("파일 [isInMemory] : "+ isInMemory +"<br/>");
     out.println("파일 [sizeInBytes] : "+ sizeInBytes +"<br/>");
     
     try{
      File uploadedFile=new File(realDir,fileName);                                                   //실제 디렉토리에 fileName으로 카피 된다.
      fileItem.write(uploadedFile);
      fileItem.delete();                                                                                            //카피 완료후 temp폴더의 temp파일을 제거
     }catch(IOException ex) {} 
    }
   }
  }
 }else{
  out.println("인코딩 타입이 multipart/form-data 가 아님.");
 }
%>
</body>
</html>

 * 관련 댓글 한말씀 부탁합니다.
인코딩설정(한글파라미터가 제대로 나오지 않을때)
upload.setHeaderEncoding("UTF-8");
fileItem.getString("UTF-8");
또는
upload.setHeaderEncoding("EUC_KR");
fileItem.getString("EUC_KR");
처럼 수정해주면 된다.
방장
2009-10-14 13:15
감사합니다!!
귀염늑대
2011-12-07 11:57
감사합니다~~!!
James
2015-10-17 21:27
감사합니다 어흑..ㅠㅠㅠ
L C
2019-11-15 13:38
  작성자:    비밀번호:   (비밀번호는 숫자 4자리이며 본인댓글 삭제시 필요합니다.)
이용약관 | 개인정보취급방침