쌍용교육(JAVA)/JSP

쌍용교육 -JSP수업 47일차 fileupload

구 승 2024. 4. 24. 15:29

s01_fileForm.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>
<form action="/ch03_JSP/fileUpload" method="post" enctype="multipart/form-data">
	작성자<input type="text" name="user"><br>
	제목 <input type="text" name="title"><br>
	파일명 <input type="file" name="uploadFile"><br>
	<input type="submit" value="파일 올리기">
</form>
</body>
</html>

ch03_JSP => src/main/java => kr.web.ch05 =>

UploadServlet.java 

package kr.web.ch05;

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

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;
/*
 * maxFileSize : 개별 파일의 전송 가능한 최대 크기
 * maxRequestSize : 전송되는 모든 파일의 용량을 합친 최대 크기
 */
@MultipartConfig(
		maxFileSize = 1024*1024*5,
		maxRequestSize = 1024 *1024 * 50
		)
@WebServlet("/fileUpload")
public class UploadServlet 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 {
			out.println("작성자 :"
					+request.getParameter("user")+"<br>");
			out.println("제목 :"
					+request.getParameter("title")+"<br>");
			out.println("----------------------------<br>");
			
			out.println("파일 업로드 절대 경로 : "+realFolder +"<br>");
			
			Part part = request.getPart("uploadFile");
			String fileName = part.getSubmittedFileName();
			if(!fileName.isEmpty()) {
				//지정한 경로에 파일을 저장
				part.write(realFolder+"/"+fileName);
				out.println("파라미터명 : " + part.getName()+"<br>");
				out.println("컨텐트 타입 :" +part.getContentType()+ "<br>");
				out.println("파일명 : "+fileName + "<br>");
				out.println("파일 크기 : " + part.getSize() + "bytes<br>");
				out.println("-------------------------------<br>");
			}
		}catch(IllegalStateException e) {
			out.println("용량초과 : "+ e.toString());
		}
		
	}
	
}

절대경로를 복사해서 탐색기에 검색하면 업로드한 사진이 나온다. 

파일로 들어가면 나오지만 이클립스 안에는 없음. workspace로 보내지않고 metadata에 있는 폴더로 들어간다.

s02_fileMutiForm.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>
<form action="/ch03_JSP/fileMultiUpload" method="post" enctype="multipart/form-data">
	이름:<input type="text" name="name"><br>
	제목:<input type="text" name="title"><br>
	이미지1:<input type="file" name="uploadFile1" accept="image/gif,image/png,image/jpeg"><br>
	이미지2:<input type="file" name="uploadFile2" accept="image/gif,image/png,image/jpeg"><br>
	
	<input type="submit" value="파일 올리기">
</form>
</body>
</html>

UploadServlet2.java 

package kr.web.ch05;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

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("/fileMultiUpload")
public class UploadServlet2 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 {
			out.println("작성자 :"
					+request.getParameter("name")+"<br>");
			out.println("제목 :"
					+request.getParameter("title")+"<br>");
			out.println("----------------------<br>");
			/*
			Part part1 = request.getPart("uploadFile1");
			String fileName = part1.getSubmittedFileName();
			if(!fileName.isEmpty()) {
				part1.write(realFolder+"/"+fileName);
				out.println("<img src=\"/ch03_JSP/upload/"+part1.getSubmittedFileName()+"\">");
			}
			
			
			Part part2 = request.getPart("uploadFile2");
			String fileName2 = part2.getSubmittedFileName();
			if(!fileName2.isEmpty()) {
				part2.write(realFolder+"/"+fileName2);
				out.println("<img src=\"/ch03_JSP/upload/"+part2.getSubmittedFileName()+"\">");
			}
			*/
			Collection<Part> parts = request.getParts();
			for(Part p : parts) {
				String name = p.getName();
				String collecFileName = p.getSubmittedFileName();
				if(collecFileName!=null && !collecFileName.isEmpty()) {
					p.write(realFolder+"/"+collecFileName);
					out.println("<img src=\"/ch03_JSP/upload/"+collecFileName+"\"><br>");
				}
			}
		}catch(IllegalStateException e) {
			out.println("용량 초과 :" + e.toString());
		}
	}
}

 

s03_profileForm.jsp