티스토리 뷰
3. Commons-FileUpload를 이용한 파일 업로드
Commons-FileUpload는 파일 업로드 패키지로 서버의 메모리상에서 파일 처리가 가능하도록 지원한다.
Commons-FileUpload는 아파치 톰캣에 존재한다.
이 패키지는 Commons-io 패키지를 바탕으로 작성되어있기 때문에 commons-fileupload.jar, commons-io.jar 오픈 라이브러리 파일이 필요하다.
또한, JSP 페이지에 org.apache.commons.fileupload.* 을 import 해주어야한다.
이 패키지를 이용하여 파일을 업로드시 DiskFileUpload 객체를 먼저 생성해야한다.
DiskFileUpload 클래스의 메소드
메소드 | 유형 | 설명 |
setRepositoryPath(String repositoryPath) | void | 업로드된 파일을 임시로 저장할 디렉터리를 설정한다. |
setSizeMax(long sizeMax) | void | 최대 파일의 크기를 설정한다. |
setSizeThreshold(int sizeThreshold) | void | 메모리상에 저장할 최대 크기를 설정한다. |
paraseRequest(HttpServletRequest req) | List<RileItem> | 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을 반환한다. |
ex) Commons-FileUpload를 이용하여 파일 업로드 및 정보 출력하기
예제 7-4
fileupload04.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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>
fileupload04_process.jsp
<%@ 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>Insert title here</title>
</head>
<body>
<%
String path="C:\\ltr";
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);
}
}
%>
</body>
</html>
결과
'코딩 > JSP' 카테고리의 다른 글
[10주 1일차] 다국어 처리 (0) | 2023.12.11 |
---|---|
[10주 1일차] 유효성 검사 (0) | 2023.12.11 |
웹쇼핑몰 (1) | 2023.12.08 |
[9주 4일차] 파일 업로드 (0) | 2023.12.07 |
[9주 4일차] 웹 쇼핑몰 : 상품 등록 페이지 만들기 (1) | 2023.12.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday