-
Wed/Feb/19 [Java/JSP] Day35. FileUploadStudy/2020 국비교육_Java 2020. 2. 19. 09:50
Wed/Feb/19 [Java/JSP]
Day35. FileUpload
File Upload
초기세팅
-
library : cos.jar, jstl.jar, ojdbc.jar(OracleSQLServer)
-
cos.jar : 파일 전송을 위해 필요한 open lib (oreilly.com 제공)
-
-
upload 폴더 : upload되는 파일 저장 위치
-
C:\{Workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\{ProjectName}\upload
-
fileUploadForm.jsp
<Form> 설정
<form action="fileUpload.jsp" method = "post" enctype="multipart/form-data">
파일 전송시 enctype 설정 필수
-
multipart - 안정적인 전송을 위해 파일을 쪼개서 보낼 수 있도록 지정
-
각 네트워크 마다 손실 없는 최대 크기가 있음 ex) 2G = 80 byte, 3G = 120 byte ... - SMS 사이즈
-
-
/form-data : <form> 안의 data들
cos.jar 사용을 위한 page import
-
com.oreilly.servlet.MultipartRequest : <form>에서 multipart로 전송 지정했기 때문에 필요 - 데이터 받는 쪽에서도 multipart로 request
-
com.oreilly.servlet.multipart.DefaultFileRenamePolicy : file rename 할 수 있는 권한 보유 ; server에서 아무나 write하면 안되기 때문
<%@ page import = "java.util.*, com.oreilly.servlet.MultipartRequest, com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
fileUpload.jsp
cos.jar 사용을 위한 page import : fileUploadForm.jsp과 동일
<% String uploadPath = request.getRealPath("upload"); int size = 10*1024*1024; String name = ""; String title = ""; String fileName1 = ""; String fileName2 = ""; try { MultipartRequest multi = new MultipartRequest(request, uploadPath, size, "UTF-8", new DefaultFileRenamePolicy()); name = multi.getParameter("name"); title = multi.getParameter("title"); Enumeration files = multi.getFileNames(); String file1 = (String) files.nextElement(); fileName1 = multi.getFilesystemName(file1); String file2 = (String) files.nextElement(); fileName2 = multi.getFilesystemName(file2); } catch(Exception e) { System.out.println("ERR_MultipartRequest__"+e.getMessage()); } %>
MultipartRequest 객체 생성
-
request : 들어오는 방식
-
uploadPath : 업로드되는 폴더 지정
-
size
-
"UTF-8" : 인코딩 방식
-
new DefaultDefaultFileRenamePolicy() : 파일 이름 수정 권한
multi 객체를 통해 값 전달 받음
전송된 file들은 Collection의 set 계열이므로 이름/index 없음 >>> 순차적으로 열거(Enumeration) 해줘야 함 : Enumeration type으로 변환
전송되는 file 갯수만큼 nextElement() 통해서 받고, String으로 casting해서 저장
getFilesystemName 통해서 파일명 저장
<body>
<form name = "filecheck" action="fileCheck.jsp" method="POST" > <INPUT TYPE = "HIDDEN" NAME = "name" value="<%=name %>" /> <INPUT TYPE = "HIDDEN" NAME = "title" value="<%=title %>" /> <INPUT TYPE = "HIDDEN" NAME = "fileName1" value="<%=fileName1 %>" /> <INPUT TYPE = "HIDDEN" NAME = "fileName2" value="<%=fileName2 %>" /> </form> <a href = "#" onclick="javascript:filecheck.submit()"> </a>
submit type 으로도 가능하나, 여기서는 button type으로 연습
javascript:filecheck.submit() : 자바스크립트 형태로, 'filecheck' form을 submit
* javascript:mailto() : 이메일 보낼 수 있는 화면, OS가 MS windows라면 반드시 Outlook 설치되어 있어야 함
fileCheck.jsp
<% request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String title = request.getParameter("title"); String fileName1 = request.getParameter("fileName1"); String fileName2 = request.getParameter("fileName2"); %>
파일이 제대로 넘어왔는지 확인
실행화면
fileUploadForm.jsp
fileUpload.jsp
fileCheck.jsp
upload 폴더
전체 실습 파일 : https://github.com/ezerwi/lecture0219_fileupload
'Study > 2020 국비교육_Java' 카테고리의 다른 글
Thu/Feb/20 [Java/Spring] Day36. Spring 기초 (0) 2020.02.20 Wed/Feb/19 [Java/JSP] Day35-1. FileUpload 실습_입사지원서 페이지 (0) 2020.02.19 Tue/Feb/18 [Java-Oracle] Day34-2. DBCP 데이터베이스 커넥션 풀 (0) 2020.02.18 Tue/Feb/18 [Java-Oracle] Day34-1. Oracle 기초이론(이어서) (0) 2020.02.18 Mon/Feb/17 [Java-Oracle] Day33. DB/Oracle 기초이론 (0) 2020.02.17 -