[JSP] Ch07 file upload 파일업로드 TEST

jychae·2022년 11월 3일
0

JSP

목록 보기
3/9

07_test.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>
<!-- 
	1) ch07_test.jsp에
		아이디 , 비밀번호 , 이름, 연락처, 성별, 취미, 소개를 입력 받는 폼을 작성하세요
		아이디 	name = mem_id 
		비밀번호	name = mem_pw
		이름		name = mem_name
		연락처	name = mem_phone1, mem_phone2, mem_phone3
			[첫번째] 010, 011, 016,017, 019 select 사용
			[두번째] type text size = 4 
			[세번째] type text size = 4
		성별		name = mem_sex
			남자, 여자
		플로필 이미지	name = filename
		
		소개
			textarea 이용
			cols, row 자유롭게
		버튼은 submit, reset 작성
			submit 버튼은 전송하기로 생성
			reset 버튼은 취소하기로 생성
	2) 07_test_process.jsp로 입력한 데이터를 전송해 주세요								 
 -->
 	<form name="fileForm" action="07_test_process.jsp" method="post" enctype="multipart/form-data">
		<p>아이디 : <input type="text" name="mem_id"/></p>
		<p>비밀번호  : <input type="password" name="mem_pw"/> </p>
		<p>이름 : <input type="text" name="mem_name"/> </p>
		<p>
			연락처 : 
			<select name="mem_phone1">
				<option value="010">010</option>
				<option value="011">011</option>
				<option value="016">016</option>
				<option value="017">017</option>
				<option value="019">019</option>
			</select>
			-  <input type="text" maxlength="4" size="4" name="mem_phone2"/>
			-  <input type="text" maxlength="4" size="4" name="mem_phone3"/>
		</p>
		
		<p>
			성별  : <input type="radio" name="mem_sex" value="여성" checked="checked"/> 여성
			<input type="radio" name="mem_sex" value="남성" /> 남성
		</p>
		
		<p> 
			파일: <input type="file" name="filename" multiple="multiple"/>
		</p>
		
		 <textarea rows="5" name="mem_comment" cols="50" placeholder="소개 입력"></textarea>
		<p>
			<input type="submit" value="전송하기">
			<input type="reset" value="취소하기">
		</p>
	</form>
 
 
</body>
</html>

07_test_process.jsp

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>        
<!-- 
	문제 1) ch07_test.jsp 에서 넘긴 데이터를 아래와 같이 출력해주세요.
	(*** 출력은 문제 3참고!)
	
	[이미지] < 넘긴 이미지를 이미지 태그를 이용하여 출력해주세요
	아이디 : a001
	비밀번호 : 1234
	이름 : 홍길동
	연락처 : 010-1234-1234
	성별 : 남성
	가입인사 : 반갑습니다.!
	
	문제 2) 해당 페이지로 넘어온 파라미터들을 중간 처리 후 , core 태그를 이용하여 저장 (c:set) 하고
		최종 EL로 출력해주세요.
		
	문제 3) 아래 내용에 따른 메세지를 출력해주세요
		3-1) 프로필 이미지를 선택하지 않고 전송시, " 프로필 이미지를 선택하지 않았습니다." 메세지를 출력하고,
			프로필 이미지를 선택하고 전송시, 정상 진행합니다.
		3-2) 프로필 이미지를 선택하고 정상적으로 전송 했을 때,
			업로드 한 파일의 사이즈 최대 크기(4MB) 초과시 " 이미지 크기를 초과하여 이미지를 출력할 수 없습니다." 메세지를 출력합니다.
		** 메세지를 출력 후, 문제 1)에서 출력하는 내용은 동일하게 출력이 되어야한다.
		** 업로드 경로는 자유롭게				
 -->
<%
	/* 실제 경로 D:\A_TeachingMaterial\08_Framework\00.JSP\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\JSPBook\resources\images */
	String path = request.getServletContext().getRealPath("/resources/images"); /* 서버 경로로 하고싶어 */
	File tempFile = new File(path);
	if(!tempFile.exists()){
		tempFile.mkdirs();
	}
	
	// commons-FileUpload를 이용하여 파일을 업로드 하려면 먼저 commons-FileUpload
	// 파일 업로드를 위해 패키지에 포함되어 있는 DiskFileUpload 객체를 생성함
	DiskFileUpload upload = new DiskFileUpload();
		// 업로드할 파일의
		upload.setSizeMax(30000000); // 업로드할 파일의 최대 크기(byte) - 1 ~ 무한대까지 올릴 때 모든 파일의 사이즈 크기 (파일을 전부를 합한 크기)
	    upload.setSizeThreshold(4096); // 메모리상에 저장할 최대 크기(byte)
	    upload.setRepositoryPath(path); // 업로드된 파일을 입시로 저장할 경로
	   
	    // 생성된 객체를 통해 DistFileUpload 클래스가 제공하는 메소드를 사용하여 웹 브라우저가 전송한
	    // multipart/form 유형의 요청 파라미터를 가져온다.
	    // 폼 페이지 에서 전동 된 요청 파라미터를 전달받도록 DiskFileUpload 객체 타입의 parseRequest() 메소드를 작성
	    List items = upload.parseRequest(request);
	    // 폼 페이지에서 전송된 요청 파라미터를 Iterator 클래스로 변환
	    Iterator params = items.iterator();
	   
	   		 
	    Map<String, Object> dataMap = new HashMap<String, Object>();	 
	   		 
	    int maxSize = 4 * 1024 * 1024;      // 4MB 파일업로드 max 사이즈 설정
	    boolean imgFlag = false; 			// 메세지를 출력하기 위한 스위칭
	    String msg = null;					// 출력할 메세지	    
	    
	    while(params.hasNext()) {
	       FileItem item = (FileItem) params.next();
	   	      
	    // FileItem 클래스의 메소드를 사용하여 요청 파라미터가 일반 데이터인지 파일인지 분석 및 처리하여 파일을 업로드함   
	    if(item.isFormField()) {		// 폼 페이지에서 전송된 요청 파라미터가 일반 데이터라면~
	       String name = item.getFieldName();
	       String value = item.getString("UTF-8");
		   dataMap.put(name, value);
	    } else {				// 폼 페이지에서 전송된 요청 파라미터가 파일이라면~
	       String fileFieldName = item.getFieldName();
	       String fileName = item.getName();
	       
	       if(!fileName.equals("")){
	    	   String contentType = item.getContentType(); // 파일 콘텐츠 유형
		       fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
		       long fileSize = item.getSize(); // 파일 크기 정보
		       File file = new File(path + "/" + fileName);
		       
		       // 개당 파일 최대 사이즈 초과시 알림
		       if(maxSize < fileSize) {
		          out.println("<marquee style='color:red';>이미지 크기를 초과하였습니다!<br/>");
	       	   }else{
		          item.write(file);
				  dataMap.put(fileFieldName, fileName);	
				  imgFlag = true;
				  
			 	  out.println("------------------------------------<br/>");
			 	  out.println("요청 파라미터 이름 :" + fileFieldName + "<br/>");
			 	  out.println("저장파일 이름 :" + fileName + "<br/>");
			 	  out.println("파일 콘텐츠 타입 :" + contentType + "<br/>");
			 	  out.println("파일 크기 :" + fileSize + "<br/>");
	       	   }
	       
	       } else { // 이미지 파일이 없을 때, 
	    	   msg = "프로필 이미지를 선택하지 않았습니다.";
	       }
     
		}
		
	}
	
%>
	<c:set value="<%=dataMap %>" var="datamap" />
	<c:set value="<%=imgFlag %>" var="flag" />
	<c:set value="<%=msg %>" var="message" />
	
	<c:if test="${message != null }" >
		<p>${message }</p>
	</c:if>
	<c:if test="${message == null }" >
		<c:if test ="${flag }" >
			<img src="/JSPBook/resources/images/${datamap.filename }" />
		</c:if>
		<c:if test ="${!flag }" >
			<p>이미지 크기를 초과하여 이미지를 출력할 수 없습니다.</p>
		</c:if>
	</c:if>
	
 	<p>아이디: ${datamap.mem_id } </p>
	<p>비밀번호: ${datamap.mem_pw }</p>
	<p>이름: ${datamap.mem_name }</p>
	<p>연락처: ${datamap.mem_phone1 } - ${datamap.mem_phone2 } - ${datamap.mem_phone3 } </p>
	<p>성별: ${datamap.mem_sex }</p>
	<p>가입인사: ${datamap.mem_comment }</p>
	
	<a href="./07_test.jsp"> 뒤로가기 >>>>>></a>
 	
 	
profile
안녕하세요! 초보개발자 공부 시작!

0개의 댓글