티스토리 뷰

정리 노트/JSP

9주차-5일

eyoadgkn 2023. 12. 8. 10:20

Commons-FileUpload를 이용한 파일 업로드

파일 업로드 패키지인 Commons-FileUpload는 서버의 메모리상에서 파일 처리가 가능토록 지원을 해줍니다. 이것을 이용하여 파일을 업로드할려면 Commos-FileUpload 안의 패키지에 포함된 DiskFileUploa 객체를 생성을 하여야합니다. 후에 생성된 객체를 통해서 해당 클래스가 제공하는 메서드를 이용해 웹 브라우저에서 전송이 된 Multipart/form-data를 받아옵니다. 그 후 FileItem 클래스의 메서드를 사용하여 요청 파라미터가 일반 데이터인지 파일인지 분석 및 처리해서 파일을 업로드합니다. 

<%@ 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 action="fileupload04_process.jsp" name="fileForm" 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>
<%@page import="org.apache.commons.fileupload.*" %>
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>

<%@ 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>
	<%
		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);
				
			}
		}
		
	%>
</body>
</html>

파일 업로드를 위한 form태그의 필수 입력으로method="post" enctype="multipart/type-data"
을 입력해줍니다. input="submit" 을 통해 해당 값을 가지고 action값으로 이동을 합니다.
해당 파일의 업로드 상대경로를 지정해줍니다. 
FileUpload패키지에 포함된 DiskFileUpload를 통해 해당 브라우저에서 전송되는 파일과 입력값을
전달받습니다. 
후에 해당 참조변수를 통해 DiskFileUpload안의 메서드인 parseRequest를 통해 request안에 담긴 값들을
해당 변수에 List객체 타입으로 저장을 합니다.

*List객체 타입으로 지정한 이유는 안에 포함된 Iterator 메서드를 사용하기 위함입니다.
iterator는 반복자라는 의미를 지녔는데, 컨테이너, 특히 리스트를 순회할 수 있게 해주는 객체입니다.
참조:https://onlyfor-me-blog.tistory.com/319

Iterator객체를 타입으로 해당 값들을 Iterator 클래스로 변환을 시켜줍니다.

while문을 통해 반복을 돌려줍니다.
조건식:해당 변수에 다음 요소의 값이 있을 때까지 반복
FileItem으로 캐스팅을 해주는 이유는 MultipartRequest를 사용할 때는 따로 분류를 안에서 해줘서
String으로 캐스팅을 해주었지만 여기선 분류를 해주지 않기 때문에 FileItem에 담습니다.

해당 if문의 실행부분은 txt를 담당하고 있고,  else 실행부분은 img를 의미합니다.
해당 키값들을 해당 변수에 담아줍니다. 

'isFormField()'메서드의 리턴값이 true이면 text같은 일반 입력 데이터이며 'false'이면 파일 데이터를 의미합니다

'정리 노트 > JSP' 카테고리의 다른 글

10주-4일차 Filter관련 예제  (0) 2023.12.14
10주차-1일  (0) 2023.12.11
9주차-4일  (0) 2023.12.07
9주차-3일  (0) 2023.12.06
9주차-2일  (0) 2023.12.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함