/ JAVA

file upload

fileForm.jsp

<form action = "fileFormOk.jsp" method="post" enctype="multipart/form-data">
    파일 : <input type="file" name="file"><br/>
    <input type="submit" value="File Upload">
</form>
  • <input type="file"> : 파일을 선택할 수 있는 창을 만든다.
  • <form method="post"> : 형태로 전송한 폼에 담겨진 파라미터들은
    request 객체를 통해 이름에 해당되는 값을 얻어낼 수 있다 .
  • 하지만 enctype="multipart/form-data"로 지정한 폼은
    request객체로 파라미터의 값을 얻어낼 수 없다.

multipart/form-data 전송한 양식의 파라미터들에 대한 값을 얻어내기 위해
특별한 컴포넌트가 필요하다!
http://www.servlets.com/cos/
여기서 cos 파일을 다운 받아 cos/lib/cos.jar 파일을 WebContent/WEB-INF/lib에 복사한다.

fileFormOk.jsp

실질적인 업로드가 진행되는 jsp 파일

<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%
    String path  = request.getRealPath("fileFolder"); //파일이 실제로 저장되는 폴더명

    int size = 1024 * 1024 * 10; //10M
    String file="";
    String oriFile = "";

    try{
        //MultipartRequest객체가 파일 업로드를 담당
        //form에서 가져온 인자값을 얻기위해
        //업로드될 위치
        //업로드 최대크기 설정 초과할경우 exception
        //한글
        //이름이 같은 파일을 업로드할경우 파일이름 변환
        MultipartRequest multi =  new MultipartRequest(request, path, size, "utf-8", new DefaultFileRenamePolicy());

        Enumeration files = multi.getFileNames(); //올린파일이름들을 얻는다.

        String str = (String)files.nextElement();//파일이름 저장


        file = multi.getFilesystemName(str); //파일이름이 중복되어있을때 처리
        oriFile = multi.getOriginalFileName(str);

    }catch(Exception e){
        e.printStackTrace();
    }
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
</head>
<body>
file upload success;
</body>
</html>

References.