쌍용교육(JAVA)/JSP

쌍용교육 -JSP수업 47~48일차 fileupload(2)

구 승 2024. 4. 25. 09:17

s03_profileForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>프로필 사진 업로드 폼</title>
<script type="text/javascript">
window.onload=function(){
	//미리 보기 이미지 호출
	const image = document.getElementById('image');
	//전송 버튼 호출
	const submit_btn = document.getElementById('submit_btn');
	
	//파일 선택시 이벤트 연결
	const file = document.getElementById('file');
	file.onchange = function(){
		if(!file.files[0]){ // 파일이 선택되지 않았을 때(파일을 변경했다가 취소를 했을 떄)
			image.src='../images/face.png';// 기본 이미지로 설정
			submit_btn.style.display = 'none';// 전송 버튼 숨김
			return; //함수종료, onchange라서 cnsubmit면 false까지 명시 
		}
		//선택한 이미지 읽기
		const reader = new FileReader(); // FileReader 객체 생성
		reader.readAsDataURL(file.files[0]); // 선택된 파일을 읽음
		
		// 파일 읽기가 완료되었을 때 실행되는 이벤트 핸들러
		reader.onload=function(){
			image.src = reader.result;// 읽은 이미지를 미리 보기로 표시
			submit_btn.style.display = ''; // 전송 버튼 표시
		};
	};
	
	
}
</script>
</head>
<body>
<h2>프로필 사진 업로드하기</h2>
<img src ="../images/face.png" width="200" height="200" id="image">
<form action = "/ch03_JSP/profile" method="post" enctype="multipart/form-data">
	<input type="file" name="file" id="file" accept = "image/png,image/jpeg,image/gif">
	<input type = "submit" value="전송" id="submit_btn" style="display:none;">
</form>
</body>
</html>

uploadServlet3.java

package kr.web.ch05;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig(
		maxFileSize = 1024 * 1024 *10,
		maxRequestSize =1024 * 1024 *50
		)
@WebServlet("/profile")
public class uploadServlet3 extends HttpServlet{
	@Override
	public void doPost(HttpServletRequest request,
			HttpServletResponse response)
			throws ServletException, IOException{
		//컨텍스트 경로상의 파일 업로드 절대 경로 구하기
		String realFolder =
				request.getServletContext().getRealPath("/upload");
		
		//문서 타입 및 캐릭터셋 지정
		response.setContentType("text/html;charset=utf-8");
				
		//POST 방식으로 전송된 데이터 인코딩 타입 지정
		request.setCharacterEncoding("utf-8");
		
		//HTML 출력을 위한 출력 스트림 생성
		PrintWriter out = response.getWriter();
		try {
			Part part = request.getPart("file");
			String fileName = part.getSubmittedFileName();
			if(!fileName.isEmpty()) {
				part.write(realFolder+"/"+fileName);
				request.setAttribute("fileName",fileName);
				
			}
			//s04_profile.jsp 포워드
			RequestDispatcher dispatcher = 
					request.getRequestDispatcher("/ch09_fileupload/s04_profile.jsp");
			dispatcher.forward(request,response);
		}catch(IllegalStateException e) {
			out.println("용량초과 :" + e.toString());
		}
		
	}
}

s04_profile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>프로필 사진 업로드 처리</title>
</head>
<body>
<h2>저장된 프로필 사진</h2>
<img src="/ch03_JSP/upload/<%= request.getAttribute("fileName")%>" width="500">
</body>
</html>

 

최종 결과 HTML 영상