[JSP] Ch07 file upload 파일업로드 사진!

jychae·2022년 11월 1일
0

JSP

목록 보기
1/9

fileupload01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload</title>
</head>
<body>
	<!-- 
		파일업로드를 위한 폼태그에 method 속성 값은 post로,
		enctype 속성값은 multipart/form-data로 작성한다.
	 -->

	<form name="fileForm" action="fileupload01_process.jsp" method="post" enctype="multipart/form-data" >
		<p>이름 : <input type="text" name="name"/> </p>
		<p>제목 : <input type="text" name="subject"/> </p>
		<p>파일 : <input type="file" name="filename"/> </p>
		<p><input type="submit" value="파일올리기"/> </p>
	</form>

</body>
</html>

fileupload01_process.jsp

<%@page import="java.io.File"%>
<%@page import="java.nio.file.Files"%>
<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	File sfile = new File("C:\\upload");
	if(!sfile.exists()){
		sfile.mkdirs();
	}
	
	// 웹 브라우저에서 전송되는 파일을 서버의 C:\\upload 경로에 저장하고,
	// 파일의 최대 크기는 5MB(5 * 1024 * 1024) 이고,
	// 파일명의 인코딩 유형은 UTF-8이다.
	// Policy 설정을 new DefaultFileRenamePolicy()로 하는 경우, 중복되는 파일이 있으면 새로운 파일명으로 파일을 만든다.
	// 이때 새로운 파일명은 끝에 1이 붙는 파일명이다.
	// Policy 설정을 null로 하게되면 파일명 변경 정책을 성정하지 않았으므로 덮어쓴다.
	
	// C드라이브에 upload 폴더가 없는 경우, 'java.lang.IllegalArgumentException : Not a directory' 에러 발생
	// upload 폴더를 미리 생성해둔다. or 해당 경로의 폴더가 없을 때 생성할 역할을 만들어준다.
	
	MultipartRequest multi = new MultipartRequest(
			request, "C:\\upload", 5 * 1024 * 1024, // 5MB 메가바이트!
			"UTF-8", new DefaultFileRenamePolicy()); //new DefaultFileRenamePolicy() 리네임정책설정
	
	// 일반데이터 가져오기
	// 폼 페이지에서 전송된 요청 파라미터를 받도록 MultipartRequest 객체 타입의 getParameterNames()메소드를 작성한다.
	Enumeration params = multi.getParameterNames();
	
	// 폼 페이지에서 전송된 요청 파라미터가 없을 때까지 반복하도록 	hasMoreElements() 메소드를 작성한다.	
	while(params.hasMoreElements()){
		// 폼 페이지에서 전송된 요청 파라미터의 이름을 가져오도록 nextElement() 메소드를 작성
		String name = (String) params.nextElement();
		// 폼 페이지에서 전송된 요청 파라미터의 값을 얻어오도록 nextElement() 로 얻어온 요청 파라미터의 이름으로
		// MultipartRequest 객체 타입의 getParameter() 메소드를 작성
		String value = multi.getParameter(name);
		out.println(name + " = " + value + "<br/>");
	}
	out.println("----------------------------------<br/>");
	
	// 파일데이터 가져오기
	// 폼 페이지에서 전송된 요청 파라미터 중 파일을 전달 받도록 MultipartRequest 객체 타입의 getFileNames() 메소드 작성
	Enumeration files = multi.getFileNames();
	
	// 폼페이지에서 정송된 요청 파라미터 중 파일이 없을 때 까지 반복하도록hasMoreElements() 메소드 작성
	while(files.hasMoreElements()){
		// 폼페이지에서 전송된 요청 파라미터중 파일을 가져오도록 nextElement() 메소드를 작성
		// getFilesystemName() 메소드 작성
		String name = (String) files.nextElement();
		// 폼페이지에서 전송 되어 서버에 업로드 된 파일을 가져오도록 MultipartRequest 객체 타입의
		// getFilesystemName() 메소드 작성
		String filename = multi.getFilesystemName(name);
		// 폼페이지에서 전송된 파일이 서버에 저장되기 정의 파일이름을 가져오도록 MultipartRequest 객체 타입의
		// getOriginalFileName() 메소드 작성
		String original = multi.getOriginalFileName(name);
		String type = multi.getContentType(name);
		File file =multi.getFile(name);
		
		// fileupload.jsp 에서 input file로 설정된 name
		out.println("요청파라미터 이름: " + name + "<br/>");
		out.println("실제파일 이름: " + original + "<br/>");
		out.println("저장 파일 이름: " + filename + "<br/>");
		out.println("파일 콘텐츠 이름: " + type + "<br/>");
		
		if(file != null){
			out.println("파일크기 :" + file.length());
			out.println("<br/>");
		}
	}
%>

fileupload02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload</title>
</head>
<body>
	<form name="fileForm" action="fileupload02_process.jsp" method="post" enctype="multipart/form-data" >
		<p>
			이름1 : <input type="text" name="name1"/> 
			제목1 : <input type="text" name="subject1"/> 
			파일1 : <input type="file" name="filename1"/> 
		</p>
		<p>
			이름2 : <input type="text" name="name2"/> 
			제목2 : <input type="text" name="subject2"/> 
			파일2 : <input type="file" name="filename2"/> 
		</p>
		<p>
			이름3 : <input type="text" name="name3"/> 
			제목3 : <input type="text" name="subject3"/> 
			파일3 : <input type="file" name="filename3"/> 
		</p>
		
		<p>
			<input type="submit" value="파일올리기"/> 
		</p>
	</form>
	
</body>
</html>

fileupload02_process.jsp

<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	File sfile = new File("C:\\upload");
	if(!sfile.exists()){
		sfile.mkdirs();
	}
	
	MultipartRequest multi = new MultipartRequest(
			request, "C:\\upload", 20 * 1024 * 1024, // 5MB 메가바이트!
			"UTF-8", new DefaultFileRenamePolicy());
	
	String name1 = multi.getParameter("name1");
	String subject1 = multi.getParameter("subject1");
	String name2 = multi.getParameter("name2");
	String subject2 = multi.getParameter("subject2");
	String name3 = multi.getParameter("name3");
	String subject3 = multi.getParameter("subject3");
	
	Enumeration files = multi.getFileNames();
	String file3 = (String) files.nextElement();
	String filename3 = multi.getFilesystemName(file3);
	String file2 = (String) files.nextElement();
	String filename2 = multi.getFilesystemName(file2);
	String file1 = (String) files.nextElement();
	String filename1 = multi.getFilesystemName(file1);
	
	
%>
<html>
<head>
	<title>File Upload</title>
</head>
<body>
	<table border="1">
		<tr>
			<th width="100">이름</th>
			<th width="100">제목</th>
			<th width="100">파일</th>
		</tr>
		<%
			out.print("<tr><td>" + name1 + "</td>");
			out.print("<td>" + subject1 + "</td>");
			out.println("<td>" + filename1 + "</td></tr>\n");
	 	
			out.print("<tr><td>" + name2 + "</td>");
			out.print("<td>" + subject2 + "</td>");
			out.println("<td>" + filename2 + "</td></tr>\n");
	 	
			out.print("<tr><td>" + name3 + "</td>");
			out.print("<td>" + subject3 + "</td>");
			out.println("<td>" + filename3 + "</td></tr>\n");
	 	
		%>
			
	</table>


</body>


</html>

fileupload03.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="fileupload03_process.jsp" method="post" enctype="multipart/form-data" >
		<p> 파일: <input type="file" name="filename"/></p>
		<p>	<input type="submit" value="파일올리기"/></p>
	</form>
</body>
</html>

fileupload03_process.jsp

<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	String fileUploadPath = "C:\\upload";
	File tempFile = new File(fileUploadPath);
	if(!tempFile.exists()){
		tempFile.mkdirs();
	}

	DiskFileUpload upload = new DiskFileUpload();
	List items = upload.parseRequest(request);
	Iterator params = items.iterator();
	
	while(params.hasNext()){
		FileItem fileItem = (FileItem) params.next();
		if(!fileItem.isFormField()){
			String fileName = fileItem.getName();
			fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
			%>
				<p><%=fileName %>이 저장되었습니다!</p>
			<%
			File file = new File(fileUploadPath + "/" + fileName);
			fileItem.write(file);
		}
	}
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
profile
안녕하세요! 초보개발자 공부 시작!

0개의 댓글