본문 바로가기

프로그래밍/JAVA, Servlet, JSP

[FileUpload] 다중 파일 업로드

[01] 다중 파일 업로드
1. 파일 선택
>>>>> upload_multi_form.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>파일 업로드 폼</title></head>
<body>
<form action="./upload_multi_proc.jsp" method="post"
      enctype="multipart/form-data">
이미지 파일: <input type="file" name="file1"><br>
이미지 파일: <input type="file" name="file2"><br>
이미지 파일: <input type="file" name="file3"><br>
이미지 파일: <input type="file" name="file4"><br>
이미지 파일: <input type="file" name="file5"><br>
파일 설명: <input type="text" name="param1" size="60"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
 

2. Upload 처리
>>>>> upload_multi_proc.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import = "org.apache.commons.fileupload.FileItem" %>
<%@ page import = "java.io.File" %>
<%@ page import = "www.utility.*" %>
<%!
// fileItem: 전송할 파일객체
// upDir: 업로드 디렉토리
// downDir: 다운로드 디렉토리
public String sendFile(FileItem fileItem, String upDir, String downDir){
   
    String fileName = "";       //업로드 파일명
  
    //  파일 태그
    System.out.println("전송된 파일명: " + fileItem.getName());
    //    전송하는 파일이 있다면
    if (fileItem.getSize() > 0) {
      int idx = fileItem.getName().lastIndexOf("\\"); //윈도우 기반
      if (idx == -1) { //유닉스, 리눅스 기반
          idx = fileItem.getName().lastIndexOf("/");
      }
     
      //순수 파일명 추출
      fileName = fileItem.getName().substring(idx + 1);
     
      try {
          //-----------------------------------------------
          //대상 폴더에 저장할 파일 객체 생성, 폴더 + 파일명
          //-----------------------------------------------
          File uploadedFile = new File(upDir, fileName);
         
          //올릴려는 파일과 같은 이름이 존재하면 중복파일 처리
          if ( uploadedFile.exists()){
              for(int k=0; true; k++){
                  //파일명 중복을 피하기 위한 일련 번호를 생성하여
                  //파일명으로 조합
                  uploadedFile = new File(upDir, "("+k+")"+fileName);
                  //조합된 파일명이 존재하지 않는다면, 일련번호가
                  //붙은 파일명 다시 생성
                  if(!uploadedFile.exists()){ //존재하지 않는 경우
                      fileName = "("+k+")"+fileName;
                      break;
                  }
              }
          }
          
          //pilot/dataroom/storage 폴더에 파일명 저장
          fileItem.write(uploadedFile);
      } catch(Exception e) {
          System.out.println(e.toString());   
      }
    }
    return fileName;
}
//---------------------------------------------------------------
//Fileupload 콤포넌트 관련 코드 끝
//---------------------------------------------------------------
%>

<html>
<head><title>파일 업로드 처리</title></head>
<body>
<h3>
<br><br>
전송된 파일 목록<br><br>
<%
//---------------------------------------------------------------
// Fileupload 콤포넌트 관련 코드, 하나의 파일을 업로드 처리
//---------------------------------------------------------------
request.setCharacterEncoding("euc-kr");
String root = request.getContextPath();  // www_oracle
//임시 저장 폴더
String temporaryDir = application.getRealPath("/fileupload/temp");
//저장 폴더
String upDir = application.getRealPath("/fileupload/storage");
//다운로드 폴더
String downDir = root + "/fileupload/storage";
String param1 = "";         //일반 폼 태그
FileItem fileItem = null;   //업로드 파일 객체
String filename = "";       //업로드 파일명
// String fileName_enc = "";   //인코딩된 파일명
// String down = ""; //다운로드할 전체 파일명
// FileUpload 콤포넌트를 쓰기위한 Manager Class 생성
// request: HttpServletRequest 객체
// -1: 메모리에 저장할 최대크기 지정하지 않음
// -1: 업로드할 최대 파일크기 지정하지 않음
// temporaryDir: 임시 업로드 폴더
FileUploadRequestWrapper requestWrap = new FileUploadRequestWrapper(request, -1, -1, temporaryDir);
// Wrapping된 request객체를 할당
request = requestWrap;
//일반 폼 태그
param1 = request.getParameter("param1");
System.out.println("이미지 설명: " + param1);
for(int i=1; i<=5; i++){
    fileItem = requestWrap.getFileItem("file" + i);
    if(fileItem != null) {
        filename = sendFile(fileItem, upDir, downDir);
%>       
    <a href="./down.jsp?downDir=<%=downDir%>&filename=<%=filename%>">
    <%=filename%>
    </a>
<%
    }
}
%>
</h3>
</body>
</html>

출처 : http://blog.empas.com/seeun791/22596703