1. 파일 업로드
◎ 파일 업로드 처리 방법
▷ 단순한 자바 코드로 작성하여 처리할 수 없어 오픈 라이브러리인 cos.jar나 commonsfileupload.jar를 사용해야 함
◎ 파일 업로드 처리 종류
2. MultipartRequest를 이용한 파일 업로드
▷ 웹 페이지에서 서버로 업로드 되는 파일 자체만 다루는 클래스
▷ 웹 브라우저가 전송한 multipart/form-data 유형과 POST 방식의 요청 파라미터 등을 분석한 후 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근
▷ 한글 인코딩 값을 얻기 쉽고, 서버의 파일 저장 폴더에 동일한 파일명이 있으면 파일명을 자동으로 변경
▷ 오픈 라이브러리 cos.jar를 배포 사이트에서 직접 다운로드해서 사용
▶ 배포 사이트 : http://www.servlets.com/cos/
▶ 다운로드 파일 : cos-22.05.zip
▶ JSP 페이지에 page 디렉티브 태그의 import 속성을 사용하여 패키지 com.oreilly.servlet.*을 설정
◎ 오픈 라이브러리에 cos.jar 설치 방법
(1) 방법 1 : cos-22.05.zip 파일 압축 해제한 후 cos.jar파일을 JSP의 webapp → WEB-INF → lib 에 추가합니다.
(2) 방법 2 : C:\Program Files\Java\설치한JDK버전\lib 에 cos.jar 파일을 추가합니다.
◎ MultipartRequest 클래스 생성
◎ MultipartRequest 생성자의 매개변수
◎ MultipartRequest 메소드
▷ 웹 브라우저에서 전송되는 요청 파라미터 중
▶ 일반 데이터는 getParameter() 메소드로 값을 받음
▶ 파일의 경우 getFileNames() 메소드를 이용하여 데이터를 받음
◎ MultipartRequest 메소드 종류
◎ MultipartRequest 클래스를 이용해 파일 업로드 및 정보 출력하기
1. fileupload01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>File Upload</title> </head> <body> <form name="fileForm" method="post" enctype="multipart/form-data" action="fileupload01_process.jsp"> <p> 이 름 : <input type="text" name="name"> <p> 제 목 : <input type="text" name="subject"> <p> 파 일 : <input type="file" name="filename"> <p> <input type="submit" value="파일 올리기"> </form> </body> </html>
2. fileupload01_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.oreilly.servlet.*"%> <%@ page import="com.oreilly.servlet.multipart.*"%> <%@ page import="java.util.*"%> <%@ page import="java.io.*"%> <% MultipartRequest multi = new MultipartRequest(request, "C:\\upload", 5*1024*1024, "utf-8", new DefaultFileRenamePolicy()); 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>"); Enumeration files = multi.getFileNames(); while(files.hasMoreElements()){ String name = (String) files.nextElement(); String filename = multi.getFilesystemName(name); String original = multi.getOriginalFileName(name); String type = multi.getContentType(name); 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>"); } } %>
A bite * 1024 = A KB
A bite * 1024 * 1024 = A MB
◎ MultipartRequest 클래스를 이용해 여러 파일 업로드 및 정보 출력하기
1. fileupload02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>File Upload</title> </head> <body> <form name="fileForm" method="post" enctype="multipart/form-data" action="fileupload02_process.jsp"> <p> 이 름1 : <input type="text" name="name1"> 제 목1 : <input type="text" name="subject1"> 파 일1 : <input type="file" name="filename1"> <p> 이 름2 : <input type="text" name="name2"> 제 목2 : <input type="text" name="subject2"> 파 일2 : <input type="file" name="filename2"> <p> 이 름3 : <input type="text" name="name3"> 제 목3 : <input type="text" name="subject3"> 파 일3 : <input type="file" name="filename3"> <p> <input type="submit" value="파일 올리기"> </form> </body> </html>
2. fileupload02_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.oreilly.servlet.*"%> <%@ page import="com.oreilly.servlet.multipart.*"%> <%@ page import="java.util.*"%> <%@ page import="java.io.*"%> <html> <head> <title>File Upload</title> </head> <body> <% MultipartRequest multi = new MultipartRequest(request, "C:\\upload", 5*1024*1024, "utf-8", new DefaultFileRenamePolicy()); String name1 = multi.getParameter("name1"); String subject1 = multi.getParameter("subject1"); String name2 = multi.getParameter("name2"); String subject2 = multi.getParameter("subject2"); String name3 = multi.getParameter("name3"); String subject3 = multi.getParameter("subject3"); Enumeration files = multi.getFileNames(); String file3 = (String) files.nextElement(); String filename3 = multi.getFilesystemName(file3); String file2 = (String) files.nextElement(); String filename2 = multi.getFilesystemName(file2); String file1 = (String) files.nextElement(); String filename1 = multi.getFilesystemName(file1); %> <table border = "1"> <tr> <th width="100">이름</th> <th width="100">제목</th> <th width="100">파일</th> </tr> <% out.print("<tr><td>" + name1 + " </td>"); out.print("<td>" + subject1 + " </td>"); out.println("<td>" + filename1 + " </td></tr>\n"); out.print("<tr><td>" + name2 + " </td>"); out.print("<td>" + subject2 + " </td>"); out.println("<td>" + filename2 + " </td></tr>\n"); out.print("<tr><td>" + name3 + " </td>"); out.print("<td>" + subject3 + " </td>"); out.println("<td>" + filename3 + " </td></tr>\n"); %> </table> </body> </html>
upload 폴더에 해당 jpg 파일들이 한꺼번에 업로드될 수 있도록 만들었습니다.
파일 올리는 것은 단순한 자바 코드로 작성하여 처리할 수 없어 오픈 라이브러리를 사용해야 합니다.
MultipartRequest은 웹 페이지에서 서버로 업로드 되는 파일 자체만 다루는 클래스로 일반 데이터는 getParameter() 메소드로 값을 받고 파일의 경우 getFileNames() 메소드를 이용하여 데이터를 받습니다.
하나의 파일만 올리거나 여러개의 파일을 동시에 올리는 예제를 시행해보았습니다.
파일 올리는 형식이 다른 것들에 비해 간단해서 좋네요!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~