
- 파일 업로드의 개요
- 파일 업로드는 웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것 입니다.
- 서버로 업로드할 수 있는 파일에는 텍스트 파일, 바이너리 파일, 이미지 파일, 문서 등 다양한 유형이 존재합니다.
- 파일 업로드를 위한 JSP 페이지
<form action="JSP파일" method="POST" enctype="multipart/form-data">
<input type="file" name="요청 파라미터 이름">
</form>
- 파일 업로드를 위해 form 태그에 인코딩 타입을 "multipart/form-data" 로 설정해야 합니다.
- 파일 업로드 처리 방법
- 오픈 라이브러리 cos.jar 또는 commonsfileupload.jar를 사용해서 서버는 요청 파라미터를 분석하여 파일을 찾고 서버의 자원에 저장하는 과정을 거쳐야 합니다.
종류 | 특징 | 필요한 라이브러리 |
MultipartRequest 이용하기 | 가장 간단한 방법 | cos.jar |
아파치 API 이용하기 | 편리하고 강력한 API 제공 | commons-fileupload.jar commons-io.jar |
- MultipartRequest를 이용한 파일 업로드
- 웹 페이지에서 서버로 업로드되는 파일 자체만 다루는 클래스입니다.
- 웹 브라우저가 전송한 multipart/form-data 유형과 POST 방식의 요청 파라미터 등을 분석한 후 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근합니다.
- MultipartRequest 클래스는 아래 배포 사이트에서 다운로드 받을 수 있습니다.
- http://www.servlets.com/cos/
Servlets.com | com.oreilly.servlet
www.servlets.com
<!-- MultipartRequest 클래스 생성 예제 -->
<%@ page import="com.oreilly.servlet.*" %>
<%@ page import="com.oreilly.multipart.*" %>
--- (생략) ---
MultipartRequest mulit = new MultipartRequest (request, "C:\\upload
, 5*1024*1024, "utf-8"
, new DefaultFileRenamePolicy())
- MultipartRequest 메소드
메소드 | 유형 | 설명 |
getContentType(String name) | String | 업로드된 파일의 콘텐츠 유형을 반환한다. 업로드된 파일이 없으면 null을 반환한다. |
getParameter(String name) | String | 요청 파라미터 이름이 name인 값을 전달받는다. |
getParameterNames() | java.util.Enumeration | 요청 파라미터 이름을 Enumeration 객체 타입으로 반환한다. |
getFile(String name) | java.io.File | 서버에 업로드된 파일에 대한 파일 객체를 반환한다. 업로드된 파일이 없으면 null을 반환한다. |
getFileNames() | java.util.Enumeration | 폼 페이지에 input 태그 내 type 속성 값이 file로 설정된 요청 파라미터의 이름을 반환한다. |
getFilesystemName(String name) | String | 사용자가 설정하여 서버에 실제로 업로드된 파일명을 반환한다. 파일명이 중복되면 변경된 파일명을 반환한다. |
getOriginalFileName(String name) | String | 사용자가 업로드한 실제 파일명을 반환한다. 파일명이 중복되면 변경 전의 파일명을 반환한다. |
- Commons-FileUpload를 이용한 파일 업로드
- 파일 업로드 패키지인 Commons-FileUpload는 서버의 메모리상에서 파일 처리가 가능하도록 지원하는 패키지입니다.
- 웹 브라우저에서 서버로 파일을 업로드하기 위해 필요한 오픈 라이브러리 commons-fileupload.jar, commons-io.jar 파일은 아래 배포 사이트에서 다운로드 받을 수 있습니다.
- http://commons.apache.org/downloads
Apache Commons – Apache Commons
Downloads Binary and source releases and links into the archives may be obtained by selecting a project below Release Announcements We recommend that you subscribe to the Apache Announce mailing list to be notified when releases are made by the Commons pro
commons.apache.org
- Commons-FileUpload 패키지로 파일 업로드하는 예제 코드
<%@ page contentType="text/html"; charset=utf-8 %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<html>
<body>
<%
String fileUploadPath="C:\\upload"; // 실제 파일이 저장되는 경로
// 1. Commons-FileUpload 패키지에 포함되어 있는 DiskFileUpload 객체 생성
DiskFileUpload upload = new DiskFileUpload();
// 2. multipart/form-data 유형의 요청 파라미터를 items에 가져오기
List items = upload.praseRequest(request);
Iterator params = items.iterator();
// 3. FileItem 클래스의 메소드를 사용하여 요청 파라미터가 일반 데이터인지
// 파일인지 확인하여 파일 업로드 진행
while(params.hasNext()) {
FileItem item = (FileItem) param.next();
if(item.isFormField()) {
String title = item.getString("UTF-8");
out.println("<h3>" + title + "</h3>");
} else {
String fileName= item.getName();
fileName = fileName.subString(fileName.lasIndexOf("\\") + 1);
File file = new File(fileUploadPath + "/" + fileName);
item.write(file);
out.println("파일 이름 : " + fileName + "<br>");
}
}
%>
</body>
</html>
- DiskFileUpload 클래스의 메소드
메소드 | 유형 | 설명 |
setRepositoryPath(String repoPath) | void | 업로드된 파일을 임시로 저장할 디렉터리를 설정한다. |
setSizeMax(long sizeMax) | void | 최대 파일의 크기를 설정한다. |
setSizeThreshold(int sizeThresold) | void | 메모리상에 저장할 최대 크기를 설정한다. |
parseRequest(HttpServletRequest req) | List<FileItem> | multipart/form-data 유형의 요청 파라미터를 가져온다. |
- FileItem 클래스의 메소드
메소드 | 유형 | 설명 |
isFormField() | boolean | 요청 파라미터가 파일이 아니라 일반 데이터인 경우 true를 반환한다. |
getFieldName() | String | 요청 파라미터의 이름을 얻어온다. |
getString() | String | 기본 문자 인코딩을 사용하여 요청 파라미터의 값을 얻어온다. |
getString(String encoding) | String | 설정한 문자 인코딩을 사용하여 요청 파라미터의 값을 얻어온다. |
getName() | String | 업로드된 파일(경로 포함)의 이름을 얻어온다. |
getSize() | long | 업로드된 파일의 크기를 얻어온다. |
get() | byte[] | 업로드된 파일을 바이트 배열로 얻어온다. |
isInMemory() | boolean | 업로드된 파일이 메모리에 저장된 상태인 경우 true를 반환하고, 임시 디렉터리에 저장된 경우 false를 반환한다. |
delete() | void | 파일과 관련된 자원을 삭제한다. 메모리상에 저장된 경우 할당된 메모리를 반환하고, 임시 파일로 저장된 경우 파일을 삭제한다. |
write() | void | 파일과 관련된 자원을 저장한다. |
getContentType() | String | 웹 브라우저가 전송하는 콘텐츠 유형을 반환하고, 정의되어 있지 않은 경우 null을 반환한다. |
'Back-End > JSP' 카테고리의 다른 글
5. 시큐리티 - 01. 선언적 시큐리티와 프로그래밍적 시큐리티 (0) | 2024.06.17 |
---|---|
4. 유효성 검사 - 01. 기본 유효성 검사와 데이터 형식 유효성 검사 (0) | 2024.06.07 |
3. JSP 페이지 처리 기법 - 01. form 태그와 폼 데이터 처리 (0) | 2024.05.30 |
2. JSP 기본 문법 - 01.JSP 태그 : 액션 태그와 내장객체 (0) | 2024.05.28 |
2. JSP 기본 문법 - 01.JSP 태그 : 디렉티브 태그 (0) | 2024.05.22 |