Archive

JSP - 파일 업로드

|

JSP - 파일 업로드


  1. form 태그

    <form method="post" enctype="multipart/form-data">
        <input type="file" name="filename" />
    </form>
    
    • form 태그의 인코딩 타입을 multipart/form-data로 지정한다. get, post 방식은 용량이 제한되어있기 때문이다
    • 이렇게 하면 일반적으로 2GB까지 업로드가 가능하다
    • 서버에서는 넘어온 데이터를 받아서 파일로 만드는 작업을 하게 된다
  2. COS 라이브러리

    • www.servlets.com 에 접속하여 cos 라이브러리를 다운받는다

    COS

    • MultipartRequest의 생성자

    생성자

    • MultipartRequest의 메소드

    메소드

    <%@ page import="com.oreilly.servlet.MultipartRequest" %>
    <%@ page import="com.oreilly.servlet.multipart.*" %>
    <%@ page import="java.util.*" %>
       
    <%
    	String uploadPath = application.getRealPath("upload");
    	int size = 10*1024*1024;
    	String name = "";
    	String subject = "";
    	String fileName1 = "";
    	String originalName1 = "";
    	try {
    		MultipartRequest multi = new MultipartRequest(request, uploadPath, size, "utf-8", new DefaultFileRenamePolicy());
    		name = multi.getParameter("name");
    		subject = multi.getParameter("subject");
    		Enumeration files = multi.getFileNames();
    		String file1 = (String) files.nextElement();
    		fileName1 = multi.getFilesystemName(file1);
    		originalName1 = multi.getOriginalFileName(file1);
    	} catch(Exception e) {
    		e.printStackTrace();
    	}
    %>
       
    <body>
    	<form name="filecheck" action="fileCheck.jsp" method="post">
    		<input type="hidden" name="name" value="<%=name %>" />
    		<input type="hidden" name="subject" value="<%=subject %>" />
    		<input type="hidden" name="filename1" value="<%=fileName1 %>" />
    		<input type="hidden" name="originalname1" value="<%=originalName1 %>" />
    	</form>
    	<a href="#" onClick="javascript:filecheck.submit()">업로드 확인 및 다운로드 페이지 이동</a>
    </body>
    
    <%
    	request.setCharacterEncoding("utf-8");
    	String name = request.getParameter("name");
    	String subject = request.getParameter("subject");
    	String fileName1 = request.getParameter("filename1");
    	String originalName1 = request.getParameter("originalname1");
    %>
    <body>
    올린이 : <%=name %><br>
    제목 : <%=subject %><br>
    파일명1 : <%=originalName1 %><br>
    </body>
    


  3. 자카르타 FileUpload API를 이용한 파일 업로드

    • http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi https://commons.apache.org/proper/commons-io/download_io.cgi
    • 라이브러리를 다운받는다
    • 파일을 서버에 올리면 서버의 지정된 폴더에 저장하고 그걸 복사해오는 방식을 이용
    • FileUpload API 사용방법
    • FileUpload.isMultipartContent() 메소드로 웹 브라우저가 Multipart/form-data 인코딩 타입으로 데이터를 전송했는지 판단한다
    • multipart/form-data 인코딩 타입인 경우 DiskFileUpload 객체를 생성한다
    • DiskFileUpload.parseRequest() 메소드를 사용해 웹 브라우저가 전송한 데이터를 추출한다
    • DiskFileUpload.parseRequest() 메소드가 리턴한 FileItem 목록을 사용해 파일 및 파라미터를 처리한다
    • DiskFileUpload 관련 메소드

    메소드

    • FileItem 관련 메소드

    메소드


    • 서버에서는 일반적으로 FileItem.write(File file) 메소드로 업로드를 처리한다
    • 업로드 처리가 완료되는 순간 임시파일을 삭제하고 싶으면 FileItem.delete() 메소드를 사용한다



참고 자료


KG 아이티뱅크 강의 자료

처음해보는 JSP&Servlet 웹 프로그래밍