http://www.servlets.com/



cos-26Dec2008.zip


 

 

파일업로드는 Post방식으로만 가능하다 
Get 방식 불가능

Http 요청 메시지
header : get방식: http://localhost:8080/chap13/index.jsp?파일주소 << 정말 파일의 위치주소만 전송된다.
body

form  enctype="multipart/form-data" 명시를 해야 파일데이터라고 인식을함.
input type="file" 

파일을 첨부해서 보낸경우 request.getParameter(무력화당함..) 로 추출을못함. => 통체로 MultipartRequest 에 넘겸줌
WEB-INF/lib/cos.jar 
cos라이브러리는 동시에 여러 파일을 올리수있다.
maxSize : 모든파일의 합의 제한용량


WEB-INF/fileSelect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>파일 업로드 예제</title>
</head>
<body>
<!-- 
method="post" : get방식은 파일업로드 못함
enctype="multipart/form-data" : 파일업로드시 반드시 명시
type="file" : 선택파일을 매치시켜 파일을 업로드 
-->
<form name="fimeForm" method="post" enctype="multipart/form-data" action="fileUpload.jsp">
작성자: <input type="text" name="user"><br/>
제목:<input type="text" name="title"><br/>
파일명:<input type="file" name="uploadFile"><br/>
파일명2:<input type="file" name="uploadFile2"><br/>
<input type="submit" value="파일 올리기"><br/>
</form>
</body>
</html>
WEB-INF/fileUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<!-- 
MultipartRequest : 
DefaultFileRenamePolicy : 기존에 업로드 파일중 이름이 똑같은것이 있는경우  업로드시 이름을 변경해주는것 ex)a.jsp,a1.jsp
 -->
<%@ page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>

<%
    String realFolder = ""; //웹 어플레케이션상의  절대경로

    //파일이 업로드되는 폴더를 지정한다
    String saveFolder = "upload";
    String encType = "utf-8";///엔코딩타입
    int maxSize = 5 * 1024 * 1024;//최대 업로드될 파일크기 5mb

    ServletContext context = getServletContext();
    //현재 jsp 페이지의 웹어플리케이션상의 절대 경로를 구한다.
    realFolder = context.getRealPath(saveFolder);
    out.println("the realpath is: " + realFolder + "<br/>");

    try {
        MultipartRequest multi = null;

        //전송을 담당할 콘포넌트를 생성하고 파일을 전송한다.
        //전송할 파일명을 가지고 있는 객체, 서버상의 절대경로, 최대 업로드될 파일크기
        /*
        MultipartRequest(
                request, :    요청request를 통채로 넘겨줌 
                realFolder, : 웹어플리케이션상의 절대경로
                maxSize, : 최대용량
                encType, : 파일타입
                new DefaultFileRenamePolicy() :같은파일명이있는경우 이름변경
        */
        multi = new MultipartRequest(request, realFolder, maxSize, encType, new DefaultFileRenamePolicy());
        
        //Form의 파라미터 목록을 가져온다. 
        //getParameterNames: 파일과 관련없는 일반정보인 경우 추출방법
        //Enumeration : java.util : 데이터를 여러개 보관할수 있는객체 
        Enumeration params = multi.getParameterNames();

        //파라미터를 출력한다.
        while (params.hasMoreElements()) {
            //전송되는 파라미터이름
            String name = (String) params.nextElement();
            //전송되는 파라미터값
            String value = multi.getParameter(name);

            out.println(name + "=" + value + "<br>");

        }
        out.println("----------------------------------------------<br/>");

        //전송할 파일 정보를 가져와 출력한다.
        //getFileNames : 파일과 관련있는 정보인 경우의 추출방법
        Enumeration files = multi.getFileNames();

        //파일 정보가 있다면
        while (files.hasMoreElements()) {

            //input태그 속성이 file 인 태그의 name속성값 : 파라미터 이름
            String name = (String) files.nextElement();

            //서버에 저장된 파일 이름
            String filename = multi.getFilesystemName(name);

            //전송전 원래의 파일이름
            String original = multi.getOriginalFileName(name);

            //전송된 파일의 내용타입
            String type = multi.getContentType(name);

            //전송된 파일 속성이  file인 태그의 name 속성값을 이용해 파일 객체 생성
            //용량을 알아내기 위해서 : file.length();
            File file = multi.getFile(name);

            out.println("파라미터 이름 : " + name + "<br/>");
            out.println("실제 파일 이름 : " + original + "<br/>");
            out.println("저장된 파일 이름 : " + filename + "<br/>");
            out.println("파일 타입 : " + type + "<br/>");

            if (file != null) {
                out.println("크기 : " + file.length());
                out.println("<br/>");
            }
        }
    } catch (IOException ioe) {
        System.out.println(ioe);
    } catch (Exception ex) {
        System.out.println(ex);
    }
%>



다중업로드

+ Recent posts