티스토리 뷰

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