본문 바로가기

BackEnd/JSP

[JSP 웹 프로그래밍] 파일 업로드 2 (Commons-FileUpload)

728x90
반응형

1. Commons-FileUpload

   ▷ 파일 업로드 패키지

   ▷ 서버의 메모리상에서 파일 처리가 가능하도록 지원

   ▷ 오픈 라이브러리 commons-fileupload.jar, commons-io.jar 파일을 배포 사이트에서 직접 다운로드해서 사용

      ▶ 배포 사이트 :  http://commons.apache.org/downloads/ 

      ▶ 다운로드 파일 : commons-fileupload-1.3.3-bin.zip, commons-io-2-6-bin.zip

   ▷ JSP 페이지에 page 디렉티브 태그의 import 속성을 사용하여 패키지 org.apache.commons.fileupload.*를 설정

 

◎ DiskFileUpload 클래스의 메소드

 

◎ FileItem 클래스의 메소드

 

◎ Commons-FileUpload를 이용하여 파일 업로드하기 예제

1. fileupload03.jsp
<%@ 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 action="fileupload03_process.jsp" method="post"
	 enctype="multipart/form-data">
		<p> 파 일 : <input type="file" name="filename">
		<p> <input type="submit" value="파일 올리기">
	</form>
</body>
</html>​

 

2. fileupload03_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<%
	String fileUploadPath = "C:\\upload";

	DiskFileUpload upload = new DiskFileUpload();
	
	List items = upload.parseRequest(request);
	
	Iterator params = items.iterator();
	
	while(params.hasNext()){
		FileItem fileItem = (FileItem) params.next();
		if(!fileItem.isFormField()){
			String fileName = fileItem.getName();
			fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
			File file = new File(fileUploadPath + "/" + fileName);
			fileItem.write(file);
		}
	}
%>​




Commons-FileUpload를 통해 파일을 원하는 폴더로 옮길 수 있습니다.

 

◎ Commons-FileUpload를 이용하여 파일 업로드 및 정보 출력하기 예제

1. fileupload04.jsp
<%@ 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" action="fileupload04_process.jsp" method="post"
	 enctype="multipart/form-data">	 
		<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>​

 



2. fileupload04_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<%
	String path = "C:\\upload2";

	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();
		
		// 일반적인 필드 입력상자 (text)
		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);
			
		}
	}
%>​

 

Commons-FileUpload는 서버의 메모리상에서 파일 처리가 가능하도록 지원하는 클래스 입니다.

MultipartRequest은 웹 페이지에서 서버로 업로드 되는 파일 자체만 다룬다는 점에서 차이가 있습니다.

 

이전 예제와 동일하게 하나의 파일만 올리거나 여러개의 파일을 동시에 올리는 예제를 시행해보았습니다.

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형