파일 업로드(file upoad)

    1. 웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것

    2. 서버로 업로드할 수 있는 파일

    3. 웹 브라우저에서 서버로 파일을 전송하기위해 JSP페이지에 폼 태그 사용

    4. 전송된 파일을 서버에 저장하기 위해 오픈 라이브러리를 이용

     

     


    1번째 방법 - con

    com.oreilly.servlet 라이브러리 다운로드

    servlets.com/cos/

     

    Servlets.com | com.oreilly.servlet

     

    servlets.com


    SQL편집기 이클립스에서 실행하기 - DB(MySQL)연결 설정

    jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC

     

    파일모양 선택
    저장경로 설정


    JSP 파일업로드 cos 사용 예제 

    fileupload_cos_1.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>파일 업로드(cos.jar이용)</title>
    </head>
    <body>
    	<!-- enctype 속성 : 전송타입 설정, 
    						파일을 전송하기 위해서는 반드시 multipart/form-data로 지정함-->
    	<form action="fileupload_cos_1_process.jsp" name="fileForm" method="post"
    			enctype="multipart/form-data">
    		<p><b>이 름 : </b><input type="text" name="name" /></p>
    		<p><b>제 목 : </b><input type="text" name="title" /></p>
    		<p><b>파 일 : </b><input type="file" name="filename" /></p>
    		
    		<p><input type="submit" value="파일 업로드" /></p>
    	</form>
    </body>
    </html>

     

    fileupload_cos_1_process.jsp

    <%@page import="java.io.File"%>
    <%@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"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>파일 업로드 처리</title>
    </head>
    <body>
    	<%
    		MultipartRequest multi = new MultipartRequest(request, 
    					"C:\\workspace-jsp\\upload", 		//업로드될 경로 지정
    					10*1024*1024, 						//파일의 최대크기 지정(10mb)
    					"UTF-8",							//인코딩 방식
    					new DefaultFileRenamePolicy() 		//파일이름에 대한 정책(동일한 이름의 파일이 있다면 덮어쓰는것이 아니라 새로운 파일로 만들어주는 기능)
    					);
    		Enumeration params = multi.getParameterNames();
    		
    		while(params.hasMoreElements()) {
    			String name = (String)params.nextElement();
    			String value = multi.getParameter(name);
    			out.println(name +"="+ value +"<br/>");
    		}
    		
    		out.println("------------------------------------------------------------<br/>");
    		Enumeration files = multi.getFileNames();
    		while(files.hasMoreElements()) {
    			String name = (String)files.nextElement();
    		  	String filename = multi.getFilesystemName(name); //파일이름 얻기
    			
    		  	String original = multi.getOriginalFileName(name); //이전 파일이름 얻기
    		  	String type = multi.getContentType(name); //파일 타입(mp3, image...)
    		  	File file = multi.getFile(name); //파일의 참조를 얻음.
    		  	
    		  	out.println("요청들어온 파라미터 이름 : " +name+ "<br/>");
    		  	out.println("저장 파일 이름 : " +filename+ "<br/>");
    		  	out.println("실제 파일 이름 : " +original+ "<br/>");
    		  	out.println("파일 컨텐츠 유형 : " +type+ "<br/>");
    		  	
    		  	if(file != null){
    		  		out.println("파일 크기 : " +file.length()+ "<br/>");
    		  		out.println("파일 경로 : " +file.getPath()+ "<br/>");
    		  	}
    		}
    		
    	%>
    </body>
    </html>

    fileupload_cos_1_process.jsp => Source연결 설정

    Multipartrequest 선택하고 F3

    External location => con/src  

     

    workspace에 upload 폴더 생성후 -> 주소복사 

    C:\\workspace-jsp\\upload -> 업로드될 경로 지정

     

    업로드 결과

     

    다중 파일 업로드 예제

    fileupload_cos_2.jsp 

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>파일 다중 업로드(cos.jar이용)</title>
    </head>
    <body>
    	<!-- enctype 속성 : 전송타입 설정, 
    						파일을 전송하기 위해서는 반드시 multipart/form-data로 지정함-->
    	<form action="fileupload_cos_2_process.jsp" name="fileForm" method="post"
    			enctype="multipart/form-data">
    		<p><b>이 름1 : </b><input type="text" name="name1" />
    		<b>제 목1 : </b><input type="text" name="title1" />
    		<b>파 일1 : </b><input type="file" name="filename1" />
    		
    		<p><b>이 름2 : </b><input type="text" name="name2" />
    		<b>제 목2 : </b><input type="text" name="title2" />
    		<b>파 일2 : </b><input type="file" name="filename2" />
    		
    		<p><b>이 름3 : </b><input type="text" name="name3" />
    		<b>제 목3 : </b><input type="text" name="title3" />
    		<b>파 일3 : </b><input type="file" name="filename3" />
    		
    		
    		<p><input type="submit" value="파일 업로드" /></p>
    	</form>
    </body>
    </html>

     

    fileupload_cos_2_process.jsp

    <%@page import="java.io.File"%>
    <%@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"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>파일 다중 업로드 처리</title>
    </head>
    <body>
    	<%
    		MultipartRequest multi = new MultipartRequest(request, 
    					"C:\\workspace-jsp\\upload", 		//업로드될 경로 지정
    					1000*1024*1024, 						//파일의 최대크기 지정(1000mb)
    					"UTF-8",							//인코딩 방식
    					new DefaultFileRenamePolicy() 		//파일이름에 대한 정책(동일한 이름의 파일이 있다면 덮어쓰는것이 아니라 새로운 파일로 만들어주는 기능)
    					);
    		// 업로드된 이름과 제목을 가져온다.
    		String name1 = multi.getParameter("name1");
    		String title1 = multi.getParameter("title1");
    		
    		String name2 = multi.getParameter("name2");
    		String title2 = multi.getParameter("title2");
    		
    		String name3 = multi.getParameter("name3");
    		String title3 = multi.getParameter("title3");
    		
    		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); //파일의 이름
    			
    	%>
    		<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>" +title1+ "</td>");
    				out.print("<td>" +filename1+ "</td></tr>");
    				
    				out.print("<tr><td>" +name2+ "</td>");
    				out.print("<td>" +title2+ "</td>");
    				out.print("<td>" +filename2+ "</td></tr>");
    				
    				out.print("<tr><td>" +name3+ "</td>");
    				out.print("<td>" +title3+ "</td>");
    				out.print("<td>" +filename3+ "</td></tr>");
    			%>
    			
    		</table>
    	<%
    		
    	out.println("------------------------------------------------------------<br/>");
    	Enumeration files1 = multi.getFileNames();
    	while(files1.hasMoreElements()) {
    		String name = (String)files1.nextElement();
    	  	String filename = multi.getFilesystemName(name); //파일이름 얻기
    		
    	  	String original = multi.getOriginalFileName(name); //이전 파일이름 얻기
    	  	String type = multi.getContentType(name); //파일 타입(mp3, image...)
    	  	File file = multi.getFile(name); //파일의 참조를 얻음.
    	  	
    	  	out.println("요청들어온 파라미터 이름 : " +name+ "<br/>");
    	  	out.println("저장 파일 이름 : " +filename+ "<br/>");
    	  	out.println("실제 파일 이름 : " +original+ "<br/>");
    	  	out.println("파일 컨텐츠 유형 : " +type+ "<br/>");
    	  	
    	  	if(file != null){
    	  		out.println("파일 크기 : " +file.length()+ "<br/>");
    	  		out.println("파일 경로 : " +file.getPath()+ "<br/>");
    	  	}
    	}
    	
    	%>
    </body>
    </html>

     

    fileupload_cos_2.jsp
    fileupload_cos_2_process.jsp

     


    2번째 방법 - commons.apache.org 아파치 톰켓 이용

    commons.apache.org 라이브러리 다운로드

    commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

     

    FileUpload – Download Apache Commons FileUpload

    Download Apache Commons FileUpload Using a Mirror We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (4

    commons.apache.org

    commons.apache.org/proper/commons-io/download_io.cgi

     

    Commons IO – Download Apache Commons IO

    Download Apache Commons IO Using a Mirror We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours)

    commons.apache.org

    JSP 파일업로드 commons 사용 예제 

    fileupload_commons_1.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>파일 업로드(commons.jar이용)</title>
    </head>
    <body>
    	<!-- enctype 속성 : 전송타입 설정, 
    						파일을 전송하기 위해서는 반드시 multipart/form-data로 지정함-->
    	<form action="fileupload_commons_1_process.jsp" name="fileForm" method="post"
    			enctype="multipart/form-data">
    		<p><b>파 일 : </b><input type="file" name="filename" /></p>
    		
    		<p><input type="submit" value="파일 업로드" /></p>
    	</form>
    </body>
    </html>

     

    fileupload_commons_1_process.jsp

    <%@page import="java.io.File"%>
    <%@page import="java.util.Iterator"%>
    <%@page import="java.util.List"%>
    <%@page import="org.apache.commons.fileupload.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>파일 업로드(commons)</title>
    </head>
    <body>
    	<%
    		request.setCharacterEncoding("UTF-8");
    		
    		//업로드를 할 서버의 경로 지정함.(PC의 특정위치)
    		String fileUploadPath = "C:\\workspace-jsp\\upload";
    		
    		DiskFileUpload upload = new DiskFileUpload();
    		//요청된 파라미터 전달받기 위해서 parseRequest() 호출
    		List items = upload.parseRequest(request);
    		
    		Iterator params = items.iterator();
    		
    		while(params.hasNext()){
    			FileItem fileItem = (FileItem)params.next();
    			
    			//isFormField() : 요청한 파라미터가 파일이 아니라 일반데이터인 경우 true 리턴
    			//false = 파일이라는 의미
    			if(!fileItem.isFormField()) {
    				String fileName = fileItem.getName();
    				//경로출력
    				out.println("1 : " +fileName+ "<br/>");
    				
    				/* 파일명 앞에 있는 경로를 제거해서 파일명에 저장.
    					+1을 하는 이유 : lastIndexOf()를 찾지 못하면 -1을 리턴한다.
    					=> 0값을 만들어주기 위해서 +1한다.
    				*/
    				//C:\\workspace-jsp\\upload\\파일이름 => 파일이름만 추출
    				fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
    				
    				File file = new File(fileUploadPath +"/"+ fileName);
    				fileItem.write(file);
    				
    				out.println("파일이름 : " +fileName+ "<br/>");
    				out.println("파일 저장 경로 : " +file.getPath()+ "<br/>");
    			}
    		}
    	%>
    </body>
    </html>

     

     

     

     

     

     

     

     

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading