목차
파일 업로드의 개요
파일 업로드(file upload)
- 웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것
- 서버로 업로드할 수 있는 파일
- 텍스트 파일, 바이너리 파일, 이미지 파일, 문서 등 다양한 유형이 있다.
- 웹 브라우저에서 서버로 파일을 전송하기 위해 JSP 페이지에 폼 태그 사용
- 전송된 파일을 서버에 저장하기 위해 오픈 라이브러리 이용
파일 업로드를 위한 JSP 페이지 규칙
<form action="JSP페이지.JSP" method="POST" enctype="multipart/form-data">
<input type="file" name="요청 파라미터 이름">
</form>
- form 태그의 method 속성은 반드시 POST 방식으로 설정
- form 태그의 enctype 속성은 반드시 multipart/form-data로 설정
- form 태그의 action 속성은 파일 업로드를 처리할 JSP 파일로 설정
- 파일 업로드를 위해 input 태그의 type 속성을 file로 설정
- 만약 여러 파일을 업로드하려면 2개 이상의 input 태그를 사용하고 name 속성에 서로 다른 값을 설정
enctype=“multipart/form-data“ 로 전송했을때 request 객체로 전송된 파라미터 값을 얻어낼 수 없음. 예) request.getParamerter()
파일 업로드 처리 방법
- 단순한 자바 코드로 작성하여 처리할 수 없어 오픈 라이브러리인 cos.jar나 commonsfileupload.jar를 사용해야 함
MultipartRequest를 이용한 파일 업로드
MultipartRequest
- 웹 페이지에서 서버로 업로드되는 파일 자체만 다루는 클래스
- 웹 브라우저가 전송한 multipart/form-data 유형과 POST 방식의 요청 파라미터 등을 분석한 후 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근
- 한글 인코딩 값을 얻기 쉽고, 서버의 파일 저장 폴더에 동일한 파일명이 있으면 파일명을 자동으로 변경
MultipartRequest 클래스 생성
<%@ page import="com.oreilly.servlet.*"%>
<%@ page import="com.oreilly.servlet.multipart.*"%>
MultipartRequest multi = new MultipartRequest(request,
"C:\\upload\\",// 파일 저장 경로
5 * 1024 * 1024, "utf-8", new DefaultFileRenamePolicy());
// maxPostSize // encoding // policy
- 서버의 파일 저장 경로 : c:\upload\ 경로에 저장
- 파일 최대 크기; : 5MB(5 *1024 * 1024)
- 파일 인코딩 방식 : utf-8
- 서버에 저장된 파일명 중복 처리 : DefaultFileRenamePolicy()
- 서버에 동일한 파일이 존재하면 웹 브라우저에서 전송된 파일명 뒤에 숫자를 덧붙여 파일명 중복되지 않게 함.
- com.oreilly.servlet.multipart.* 패키지 import 해야 사용할 수 있음.
MultipartRequest 생성자의 매개변수
MultipartRequest는 javax.servlet.http.HttpServletRequest 에서 해당 타입이 지원되는데 톰캣 10에서는 jakarta.servlet.http.HttpServletRequest 를 지원해 톰캣 9로 실행하여야 함
MultipartRequest 메소드의 종류
- 웹 브라우저에서 전송되는 요청 파라미터 중
- 일반 데이터 → getParameter( ) 메소드로 값을 받음
- 파일 데이터인 경우 → getFileNames( ) 메소드를 이용하여 데이터를 받음
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>");
}
파일 업로드의 개요
파일 업로드(file upload)
- 웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것
- 서버로 업로드할 수 있는 파일
- 텍스트 파일, 바이너리 파일, 이미지 파일, 문서 등 다양한 유형이 있다.
- 웹 브라우저에서 서버로 파일을 전송하기 위해 JSP 페이지에 폼 태그 사용
- 전송된 파일을 서버에 저장하기 위해 오픈 라이브러리 이용
파일 업로드를 위한 JSP 페이지 규칙
<form action="JSP페이지.JSP" method="POST" enctype="multipart/form-data">
<input type="file" name="요청 파라미터 이름">
</form>
- form 태그의 method 속성은 반드시 POST 방식으로 설정
- form 태그의 enctype 속성은 반드시 multipart/form-data로 설정
- form 태그의 action 속성은 파일 업로드를 처리할 JSP 파일로 설정
- 파일 업로드를 위해 input 태그의 type 속성을 file로 설정
- 만약 여러 파일을 업로드하려면 2개 이상의 input 태그를 사용하고 name 속성에 서로 다른 값을 설정
enctype=“multipart/form-data“ 로 전송했을때 request 객체로 전송된 파라미터 값을 얻어낼 수 없음. 예) request.getParamerter()
파일 업로드 처리 방법
- 단순한 자바 코드로 작성하여 처리할 수 없어 오픈 라이브러리인 cos.jar나 commonsfileupload.jar를 사용해야 함
MultipartRequest를 이용한 파일 업로드
MultipartRequest
- 웹 페이지에서 서버로 업로드되는 파일 자체만 다루는 클래스
- 웹 브라우저가 전송한 multipart/form-data 유형과 POST 방식의 요청 파라미터 등을 분석한 후 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근
- 한글 인코딩 값을 얻기 쉽고, 서버의 파일 저장 폴더에 동일한 파일명이 있으면 파일명을 자동으로 변경
MultipartRequest 클래스 생성
<%@ page import="com.oreilly.servlet.*"%>
<%@ page import="com.oreilly.servlet.multipart.*"%>
MultipartRequest multi = new MultipartRequest(request,
"C:\\upload\\",// 파일 저장 경로
5 * 1024 * 1024, "utf-8", new DefaultFileRenamePolicy());
// maxPostSize // encoding // policy
- 서버의 파일 저장 경로 : c:\upload\ 경로에 저장
- 파일 최대 크기; : 5MB(5 *1024 * 1024)
- 파일 인코딩 방식 : utf-8
- 서버에 저장된 파일명 중복 처리 : DefaultFileRenamePolicy()
- 서버에 동일한 파일이 존재하면 웹 브라우저에서 전송된 파일명 뒤에 숫자를 덧붙여 파일명 중복되지 않게 함.
- com.oreilly.servlet.multipart.* 패키지 import 해야 사용할 수 있음.
MultipartRequest 생성자의 매개변수
MultipartRequest는 javax.servlet.http.HttpServletRequest 에서 해당 타입이 지원되는데 톰캣 10에서는 jakarta.servlet.http.HttpServletRequest 를 지원해 톰캣 9로 실행하여야 함
MultipartRequest 메소드의 종류
- 웹 브라우저에서 전송되는 요청 파라미터 중
- 일반 데이터 → getParameter( ) 메소드로 값을 받음
- 파일 데이터인 경우 → getFileNames( ) 메소드를 이용하여 데이터를 받음
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>");
}