본문 바로가기
코딩 해보자

220922 FileUpload를 해봅시다.

by friendlyboy 2022. 9. 22.

프로젝트 명 : Dwp_Ch15_Upload_Bean

 

파일 업로드 API => cos.jar
 (DextUpload 덱스트 업로드
  ABCUpload ABC 업로드
  ... )

업로드 시에 form요소
  input type ="file"

파일전송 ( 클라이언트측)
form요소에서는 
  input type ="file" 
                    method = "post"
                    enctype ="multipart/form-data" 만 사용가능

input[type=text name=uid]
select, textarea ...
 
파일 수신 및 업로드(서버 측)
 MultipartRequest 객체를 사용할 수 있음.
  생성자를 사용하여 업로드 함.
  생성자 인수
  1. request
  2. 서버 측에 전송된 파일이 저장되는 폴더
     => 로컬 경로 사용
  3. 최대 용량 (byte 단위 사용 )
  4. encoding (utf-8)
  5. 동일 파일명 처리 정책(=규칙)
=> new DefaultFileRenamePolicy( );

 + 파일과 함께 전송되는 텍스트 수신

  => request.setCharacterEncoding("UTF-8");
  => MultipartRequest objMulti 
       = new MultipartRequest( 
  request,
  "파일업로드 path",
  50*1024*1024,
  "UTF-8"
  new DefaultFileRenamePolicy( )
);

// String uid = request.getParameter("uid");  (직접적으로 사용 x)
// String uid = objMulti.getParameter("uid");  멀티파트리퀘스트 객체 사용  


cos.jar 다운로드
http://www.servlets.com/

lib - cos.jar 복사  => 파일업로드를 위해 필요한 API

 

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" autoFlush="true" %>
<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="UTF-8">
		<title>Document</title>
		<link rel="shortcut icon" href="#">
		<link rel="stylesheet" href="/style/style.css">
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
		<script src="/script/script.js"></script>		
	</head>
	<body>
		<div id="wrap" class="insertWrap">
			<h1>입력페이지</h1>
			<hr>
			<form action="/fileInsert/fileInsertProc.jsp"
				method="post" enctype="multipart/form-data">
			
				<!-- div*4>p.insertLabel+p>input -->
			
				<div class="dFlex">
					<p class="insertLabel">
						<span>아이디</span>
					</p>
					<p><input type="text" name="uid"></p>
				</div>
				<div class="dFlex">
					<p class="insertLabel">
						<span>제목</span>
					</p>
					<p><input type="text" name="subject"></p>
				</div>
				<div class="dFlex">
					<p class="insertLabel">
						<span>파일업로드</span>
					</p>
					<p><input type="file" name="upFileName"></p>
				</div>
				
				<div class="insertBtnArea">
					<button type="submit">전송</button>
				</div>
				
			</form>
			
		</div>
		<!-- div#wrap -->
			
	</body>
</html>

 

파일 업로드 될 폴더를 만듬 - 마우스 오른쪽 키 - properties - Location 을 복사하여 

MultipartRequest objMulti = new MultipartRequest( ); 에  주소로 사용한다.

더보기

 

<%@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" autoFlush="true"%>
    
<%
String saveFolder = "D:/Bigdata_Java_220511/DJ/silsp/p07_JSP/Dwp_Ch15_Upload_Bean/WebContent/uploadFolder";
							// 프로그램 실행이 브라우저에서 실행되는가 여부로  구분
							// \ => ₩를 의미함. Back Slash 백슬래쉬, 웹이 아닌 데스크탑 응용프로그램에서 사용하는 경로
							// / => Slash 슬래쉬, 웹 프로그램에서 사용하는 경로
int maxSize = 50*1024*1024;	
String fileEnc = "UTF-8";	

request.setCharacterEncoding("UTF-8");
MultipartRequest objMulti = new MultipartRequest(
				request,
				saveFolder,
				maxSize,
				fileEnc,
				new DefaultFileRenamePolicy());
//uid,subject,upFIleName
%>    
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="shortcut icon" href="#">
<link rel="stylesheet" href="//style/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/script/script.js"></script>
</head>
<body>
    <div id="wrap">
<h1>업로드 완료!!</h1>
    </div>
    <!-- div#wrap  -->
</body>
</html>

String uid = objMulti.getParameter("uid");
out.print("uid :" + uid + "<br><br>");
String subject = objMulti.getParameter("subject");
out.print("subject :" + subject + "<br><br>");
String upFileName = objMulti.getParameter("upFileName");
out.print("upFileName :" + upFileName + "<br><br>");

upFileName은 

 

String upFileName = objMulti.getOriginalFileName("upFileName");

getOriginalFileName을 사용한다!

왜 이미지만 getOriginalFileName을 사용해야 할까??

동일 이름의 파일을 업로드 하면 뒤에 순서대로 숫자가 생기며 파일명이 변하는데,

원래 가지고 있던 이름은 hello.png 이므로 오리지널을 써야하는 것이었다!

 

 

 

 

파일업로드 최대용량을 줄이면 이렇게 오류가 생기는데,

예외처리를 위해 try catch 구문... (언제까지 나와)

을 사용한다.

try catch 구문으로 처리한 내용

MultipartRequest objMulti 객체를 null;로 비우고

 

try 구문에 new MultipartRequest 를 넣고

catch 구문에서 예외 처리를 한다!

 

try 구문안에서 File objFile 객체를 또 만들고, objMulti.getFIle("업로드한 파일 이름");

을 가져와서 

long fileSize 에 파일의 크기(size가 아니라 length)

를 넣고 출력하면!!

오른쪽 크롬화면이 나온다!

 

 

[FileUpload/FileDownload]
=> Bean을 사용한 업로드

파일 업로드용 Bean 만들기 =>
pack_UploadBean.DAO 

 

 

mtd_Upload에 들어가는 내용

 

			String saveFolder = "D:/Bigdata_Java_220511/DJ/silsp/p07_JSP/Dwp_Ch15_Upload_Bean/WebContent/uploadFolder";
			int maxSize = 50*1024*1024;	
			String fileEnc = "UTF-8";	

			MultipartRequest objMulti= null;
						
			try{ //파일 업로드가 이루어짐
			
			objMulti = new MultipartRequest(
			req,
			saveFolder,
			maxSize,
			fileEnc,
			new DefaultFileRenamePolicy()
			
					);
			//uid,subject,upFIleName
			//찍어보기
			String uid = objMulti.getParameter("uid");
				System.out.print("uid :" + uid );
			String subject = objMulti.getParameter("subject");
				System.out.print("subject :" + subject );
			String originFileName = objMulti.getOriginalFileName("upFileName");
				System.out.print("(오리지널파일명, 원본파일,인수명  : upFileName)" + originFileName);
			String systemFileName = objMulti.getFilesystemName("upFileName");
				System.out.print("systemFileName(업로드된 서버에 저장된 파일명) : " + systemFileName );
			long fileSize = objMulti.getFile("upFileName").length();
				System.out.print("전송된 파일의 크기(=용량) : " + fileSize );
			//File objFile = objMulti.getFile("upFileName");
			//long fileSize = objFile.length();
			
				//System.out.print("전송된 파일의 크기(=용량) : "+ fileSize );	
			}catch(IOException ioe){// 예외처리
				System.out.print(ioe.getMessage());
			}

 

댓글