19.05.06 파일 업로드

Back-End/JSP 2019. 5. 6. 22:06
728x90
반응형

-파일 업로드의 기본적인 폼-

 

HTML에서 form 태그의 속성들 중 input 태그들이 있는데 이들 중 <input type = "file"> 태그는 파일을 선택 할 수 있는 창을 호출합니다.

호출된 창에서 파일을 전송하기 위해서 반드시 form 태그의 속성들 중 method와 enctype을 다음과 같이 지정해야 합니다.

 

 <form name = "frmName" method = "post" enctype = "multipart/form-data">

 

 <input type = "file" name = "selectFile">

 

 

  enctype : 자료 전송 방법, 이 속성은 세가지의 값으로 지정될 수 있다.

 

  1. application / www-form-urlencoded

 

  디폴트 값이다. enctype를 따로 설정하지 않으면 이 값이 설정된다.

  폼데이터는 서버로 전송되기 전에 URL-Encode 된다.

 

  2. multipart / form-data

 

  파일이나 이미지를 서버로 전송할 경우 사용하는 방식

  이 방식을 사용하지 않으면 웹 서버로 데이터를 넘길때 파일의 경로명만 전송되고

  파일 내용이 전송되지 않기 때문, 그리고 이때 메소드는 post 값으로 지정해줘야 한다.

 

  3.text / plain

 

  이 형식은 인코딩을 하지 않은 문자 상태로 전송한다.

 

 

 

-예제 및 출력 결과-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <form name="frmName" method="post" enctype="multipart/form-data"
        action="viewPage.jsp">
        <!-- 파일을 전송해서 업로드하기 위해 필요한 form 태그와 input 태그를 지정 -->
        user<br /> <input name="user"><br /> title<br /> <input
            name="title"><br /> file<br /> <input type="file"
            name="uploadFile"><br />
        <!-- 파일을 업로드하기 위해 input type을 file로 지정 -->
        <input type="submit" value="UPLOAD"><br />
    </form>
</body>
</html>
cs

 

 

 

Method Summary

java.lang.String

 

getContentType(java.lang.String name) - 업로드 된 파일의 컨텐츠 타입을 반환하고 업로드 된 파일이 없으면 null을 반환합니다. 

 

java.io.File 

 

getFile(java.lang.String name) - 서버 상에 업로드된 파일의 객체를 반환하고 업로드 된 파일이 없으면 null을 반환합니다.

 

java.util.Enumeration

 

getFileName() - 폼 요소 중 input 태그 속성이 file로 된 파라미터의 이름들을 반환하고 업로드된 파일이 없으면

비어있는 Enumeration 객체를 반환합니다.

 

java.lang.String

 

getFilesystemName(java.lang.String name) - 사용자가 지정해서 서버에 실제로 업로드된 파일명을 반환 합니다. 

 

java.lang.String

 

getOriginalFileName(java.lang.String name) - 사용자가 지정해서 서버에 업로드된 파일명을 반환하고

이때의 파일명은 파일 중복을 고려한 파일명 변경 전의 이름을 반환합니다.

 

java.lang.String

 

getParameter(java.lang.String name) - 스트링으로 주어진 이름에 대한 값을 반환하고 값 없이 파라미터가 전송되었거나

해당되는 이름의 파라미터가 전송이 안 되었을 경우 null 값을 반환합니다. 

 

java.util.Enumeration

 

getParameterNames() - 모든 파라미터의 이름을 Enumeration 객체로 반환합니다.

 

java.lang.String

 

getParameterValues(java.lang.String name) - 주어진 이름에 대한 값을 스트링 배열로 반환하고

파라미터가 전송되지 않았을 때는 null 값을 반환합니다. 

 

 

 

-예제 및 출력 결과-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <form name="frmName" method="post" enctype="multipart/form-data"
        action="viewPage.jsp">
        <!-- 파일을 전송해서 업로드하기 위해 필요한 form 태그와 input 태그를 지정 -->
        user<br /> <input name="user"><br /> title<br /> <input
            name="title"><br /> file<br /> <input type="file"
            name="uploadFile"><br />
        <!-- 파일을 업로드하기 위해 input type을 file로 지정 -->
        <input type="submit" value="UPLOAD"><br />
    </form>
</body>
</html>
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%@ page import="com.oreilly.servlet.MultipartRequest"%>
<!-- 파일 업로드를 위한 클래스 import -->
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<!-- 파일 업로드 시 덮어쓰기 방지를 위해 임포트한 클래스 -->
<%@ page import="java.util.*, java.io.*"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <%
        String saveFolder = "C:/Tom"//로드 파일의 실제경로
        String encType = "EUC-KR"//인코딩 타입
        int maxSize = 5 * 1024 * 1024//파일의 최대 크기 지정
 
        try {
            MultipartRequest multi = null//NULL을 초기값으로 선언
            multi = new MultipartRequest(request, saveFolder, maxSize, encType, new DefaultFileRenamePolicy());//객체 생성
            Enumeration params = multi.getParameterNames(); //Enumeration은 여러 요소들이 배열형태로 구성되어 있는 클래스(파라미터의 이름들을 반환받는 변수)
 
            while (params.hasMoreElements()) //params.hasMoreElements()메소드를 사용해 포함된 요소들이 있는지 검사하고 요소들이 포함되어 있는 동안만 반복
            {
                String name = (String) params.nextElement();
                String value = multi.getParameter(name);
                out.println(name + "=" + value + "<br/>"); //name, value 변수에 담긴값을 브라우저 출력
            }
 
            Enumeration files = multi.getFileNames();
 
            while (files.hasMoreElements()) //java.util.Enumeration 인터페이스에 있는 메소드. 요소가 있는지 없는지 체크함
            {
                String name = (String) files.nextElement(); //Enumeration에 요소가 있을 때 요소를 추출하는 메소드. 오브젝트 타입으로 반환하기 때문에 
                                                            //String 타입으로 변환후 변수에 저장한다.
 
                String filename = multi.getFilesystemName(name);
                String original = multi.getFilesystemName(name);
                String type = multi.getContentType(name);
                File f = multi.getFile(name); //File메소드의 반환값은 File타입이다. 얻어진 File 객체를 통해서 업로드된 파일의 정보를 알수있다.
 
                out.println("파라미터 이름 : " + name + "</br>"); //반복수행이 되면서 변수에 담긴 값들을 하나씩 출력
                out.println("실제 파일 이름 : " + original + "</br>");
                out.println("저장된 파일 이름 : " + filename + "</br>");
                out.println("파일 타입 : " + type + "</br>");
 
                if (f != null) {
                    out.println("크기 : " + f.length() + "바이트");
                    out.println("<br>");
                }
 
            }
 
        } catch (IOException ioe) //업로드 할 파일이 지정한 최대 크기보다 크거나 페이지를 읽을 때 문제가 발생할 경우 처리하는 예외처리
        {
            System.out.println(ioe);
        } catch (Exception ex) //그 외에 발생하는 예외처리
        {
            System.out.println(ex);
        }
    %>
cs

 

 

728x90
반응형
: