07 파일 업로드
01 파일 업로드의 개요
서버로 파일을 전송하기 위해 JSP 페이지에 폼 태그를 사용
전송된 파일을 서버에 저장하기 위해 오픈 라이브러리를 이용
파일 업로드를 위한 JSP 페이지
- form 태그의 method 속성은 반드시 POST 방식으로 설정해야 합니다.
- form 태그의 enctype 속성은 반드시 multipart/form-data로 설정해야 합니다
- form 태그의 action 속성은 파일 업로드를 처리할 JSP 파일로 설정해야 합니다.
- 파일 업로드를 위해 input 태그의 type 속성을 file로 설정해야 합니다. 만약 여러 파일을 업로드하려면 2개 이상의 input 태그를 사용하고 name 속성에 서로 다른 값을 설정합니다.
파일 업로드 처리 방법
웹 브라우저에서 서버로 파일을 업로드하면 서버는 요청 파라미터를 분석하여 파일을 찾고 서버의 자원(파일 저장 폴더)에 저장하는 과정을 거칩니다. 이러한 처리는 단순한 자바 코드로 처리할 수 없어 오픈 라이브러리인 cos.jar 또는 commonsfileupload.jar를 사용해야 합니다.
02 MultipartRequest를 이용한 파일 업로드
01 MultipartRequest 클래스 생성
MultipartRequest는 웹 페이지에서 서버로 업로드되는 파일 자체만 다루는 클래스입니다.
MultipartRequest 생성자의 매개변수
매개변수 설명
request | Request 내장 객체를 설정한다. |
saveDirectory | 서버의 파일 저장 경로를 설정한다. |
maxPostSize | 파일의 최대 크기(바이트 단위)를 설정한다. 최대 크기를 초과하면 IOException이 발생한다. |
encoding | 인코딩 유형을 설정한다. |
policy | 파일명 변경 정책을 설정한다. saveDirectory에 파일명이 중복되는 경우 덮어쓰기 여부를 설정하며, 설정하지 않으면 덮어쓴다. |
02 MultipartRequest 메소드
메소드 유형 설명
getContentType(String name) | String | 업로드된 파일의 콘텐츠 유형을 반환한다. 업로드 된 파일이 없으면 null을 반환한다. |
getParameter(String name) | String | 요청 파라미터 이름이 name인 값을 전달받는다 |
getParameterNames() | Enumeration | 요청 파라미터 이름을 Enumeration 객체 타입으로 반환한다. |
getFile(String name) | java.io.File | 서버에 업로드된 파일에 대한 파일 객체를 반환한다. 없으면 null |
getFileNames() | Enumeration | 폼 페이지에 input 태그 내 type 속성 값이 file로 설정된 요청 파라미터의 이름을 반환한다. |
getFilesystemName(String name) | String | 사용자가 설정하여 서버에 실제로 업로드된 파일명을 반환한다. 파일명이 중복되면 변경된 파일명을 반환한다. |
getOriginalFileName(String name) | String | 사용자가 업로드한 실제 파일명을 반환한다. |
<%@ 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>
<%@ 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.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<%
MultipartRequest m = new MultipartRequest(request, "C:\\\\upload", 5 * 1024 * 1024, "utf-8", new DefaultFileRenamePolicy());
Enumeration params = m.getParameterNames();
while(params.hasMoreElements()){
String name = (String) params.nextElement();
String value = m.getParameter(name);
out.println(name + " = " + value + "<br>");
}
out.println("-----------------------------<br>");
Enumeration files = m.getFileNames();
while(files.hasMoreElements()){
String name = (String) files.nextElement();
String filename = m.getFilesystemName(name);
String original = m.getOriginalFileName(name);
String type = m.getContentType(name);
File file = m.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() + "<br>");
}
}
%>
</body>
</html>
03 Commons-FileUpload를 이용한 파일 업로드
서버의 메모리상에서 파일 처리가 가능
- 배포 사이트: http://commons.apache.org/downloads
- 다운로드 파일: commons-fileupload-1.5.bin.zip, commons-io-2.13.0-bin.zip
<%@ 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="fileupload04_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>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Upload</title>
</head>
<body>
<%
String path = "C:\\\\upload";
DiskFileUpload upload = new DiskFileUpload();
upload.setSizeMax(1000000);
upload.setSizeThreshold(4096);
upload.setRepositoryPath(path);
List items = upload.parseRequest(request);
Iterator params = items.iterator();
while (params.hasNext()) {
FileItem item = (FileItem) params.next();
if(item.isFormField()){
String name = item.getFieldName();
String value = item.getString("utf-8");
out.println(name + " = " + value + "<br>");
} else {
String fileFieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
fileName = fileName.substring(fileName.lastIndexOf("\\\\") + 1);
long fileSize = item.getSize();
File file = new File(path + "/" + fileName);
item.write(file);
out.println("----------------------<br>");
out.println("요청 파라미터 이름 : " + fileFieldName + "<br>");
out.println("저장 파일 이름 : " + fileName + "<br>");
out.println("파일 콘텐츠 유형 : " + contentType + "<br>");
out.println("파일 크기 : " + fileSize + "<br>");
}
}
%>
</body>
</html>
'도서 > 프로그래밍' 카테고리의 다른 글
[08] 쉽게 배우는 JSP 웹 프로그래밍 (1) | 2024.01.21 |
---|---|
[07] 쉽게 배우는 JSP 웹 프로그래밍 (0) | 2024.01.21 |
[05] 쉽게 배우는 JSP 웹 프로그래밍 (0) | 2024.01.18 |
[04] 쉽게 배우는 JSP 웹 프로그래밍 (0) | 2024.01.17 |
[03] 쉽게 배우는 JSP 웹 프로그래밍 (0) | 2024.01.16 |