ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Wed/Feb/19 [Java/JSP] Day35. FileUpload
    Study/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

     

     

    댓글

Designed by Tistory.