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>
<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" %>
<%
/* 실제 경로 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>