ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP - 파일 업로드(file upload)
    JSP 2020. 6. 24. 10:34

    파일 업로드(file upload)

     

    [FileUploadForm.jsp]

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <!--  
    
       클라이언트의 파일 업로드 처리 : 쿼리스트링 전송방식 : POST
       
                      content type = multipart/form-data
                      
                      <form>
                      
                      ajax
                      
                      * 바이너리 스트리밍을 통한 서버 전송 처리
                      
                        (폼필드 - mem_id, mem_pass, ..., 파일)
                        
    -->
    <form action="${pageContext.request.contextPath }/14/result.jsp" method="post" enctype="multipart/form-data">
    
       <table>
       
          <tr>
          
             <td>아이디</td>
             
             <td><input type="text" name="mem_id" /></td>
             
          </tr>
          
          <tr>
          
             <td>패스워드</td>
             
             <td><input type="text" name="mem_pass"/></td>
             
          </tr>
          
          <tr>
          
             <td>성명</td>
             
             <td><input type="text" name="mem_name"/></td>
             
          </tr>
          
          <tr>
          
             <td>파일1</td>
             
             <td><input type="file" name="files" /></td>
             
          </tr>
          
          <tr>
          
             <td>파일2</td>
             
             <td><input type="file" name="files" /></td>
             
          </tr>
          
          <tr>
             <td colspan="2"><input type="submit" value="전송" /></td>
             
          </tr>
       </table>
    </form>
    </body>
    </html>

     

    [result.jsp]

    <%@page import="java.io.File"%>
    <%@page import="org.apache.commons.io.FilenameUtils"%>
    <%@page import="org.apache.commons.fileupload.FileItem"%>
    <%@page import="java.util.List"%>
    <%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
    <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    
    	//	클라이언트(브라우저) 보안정책(Security Policy)
        
    	//		브라우저는 해당 하드웨어 시스템 내 파일 또는 디렉토리에 접근은 가능하지만
        
    	//		신규 파일 또는 디렉토리의 생성, 파일 및 디렉토리 수정과 삭제는 불가능
        
    	//		* IE ActiveX를 활용해서 파일 생성, 수정, 삭제가 가능
        
    	//	서버의 파일 업로드 처리 개발환경
        
    	//		1. 라이브러리
        
    	//			http://commons.apache.org
        
    	//				commons-fileupload-1.2.2.jar
        
    	//				commons-fileupload-2.3.jar
        
    	//			WEB-lib 
        
    	//	서버 대상 업로드된 파일의 저장 처리 : 서버 내 특정 파일 시스템 활용
        
    	//							파일 정보들은 DB 대상 저장	
        
    	out.println(application.getRealPath("/upload"));
    
    	String fileSavePath = application.getRealPath("/upload");
    
    	int fileSizeMax = 1024 * 1024 * 100;
    	
    	// 클라이언트(브라우저) 서버 대상 요청
        
    	//	일반 요청
        
    	//		1.직접 브라우저의 주소창에 URL을 입력.
        
    	//		2.location.href = '주소'
        
    	//		3.location.replace('주소')
        
    	//		4.<a href ="주소">클릭</a>
        
    	//		5.<form action=""></form> (enctype=application/x-www-form-urlencoded)
        
    	//		6.ajax
        
    	//	스트리밍 요청(파일)
        
    	//		1.<form action="" method="POST" enctype=multipart/form-data)></form>
        
    	//		2.ajax(method =POST, enctype=multipart/form-data)
        
    	
    	// 일반요청인지 스트리밍 요청인지를 구분
        
    	boolean multipartFlag = ServletFileUpload.isMultipartContent(request);
    	
    	// 스트리밍 요청이면 true, 일반요청이면 false
        
    	if(multipartFlag){
        
    		//서버의 업로드된 파일 처리 
            
    		//	1. 업로드된 파일의 임시저장소(서버 내 서버가 관리하는 파일 시스템, 서버의 메모리) 저장
            
    		//		* 임시저장소에 저장되는 파일의 확장자 : *.tmp
            
    		//		* 임시저장소에 저장되는 대상 파일의 사이즈 제한
            
    		//		* 임시저장소로 활용되는 서버내 특정 파일 패스를 지정
            
    		//	2. 업로드된 파일의 실제 저장소 저장
            
    		//		* 실제 저장소 저장 대상 파일의 사이즈 제한
            
    		//		* 실제 저장소로 활용될 서버 내 특정 파일 패스
            
    		//	3. 임시저장소에 저장된 파일의 실제저장소 저장시 임시저장소에 저장되었던 파일은 자동 삭제
            
    		DiskFileItemFactory factory = new DiskFileItemFactory();
            
    		factory.setSizeThreshold(fileSizeMax);
            
    		//factory.setRepository(new File("임시저장소소로 활용될 서버 내 파일 패스"));
           
    		ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
    		
    		// 서버대상 업로드된 파일 단위의 파일 사이즈 제한
            
    		servletFileUpload.setFileSizeMax(fileSizeMax);
    		
    		// 서버대상 업로드된 전체 파일 대상의 사이즈 제한
            
    		servletFileUpload.setSizeMax(fileSizeMax);
    		
    		// fileUplaodForm.jsp (form 태그 method=POST, enctype=multipart/form-data)
            
    		//	FileItem
            
    		//	폼필드
            
    		//	 input[type=text name=mem_id]
            
    		// 	 input[type=text name=mem_pass]
            
    		// 	 input[type=text name=mem_name]
            
    		//  파일
            
    		//	 input[type=file name=mem_name]
            
    		List<FileItem> items = servletFileUpload.parseRequest(request);
            
    		
    		for(FileItem item : items){
            
    			if(item.isFormField()){  // true면 formField 아니면 false
                
    				// 폼필드
                    
    				//	 input[type=text name=mem_id]
                    
    				// 	 input[type=text name=mem_pass]
                    
    				// 	 input[type=text name=mem_name]
                    
    				out.println("폼필드</br>");
                    
    				out.println("폼필드 키 : " + item.getFieldName() + "</br>");
                    
    				out.println("폼필드 값 : " + item.getString("UTF-8")+"</br>");
    				
    			}else{
                
    				out.println("파일</br>");
                    
    				out.println("파일의 키 : " + item.getFieldName() + "</br>");
                    
    				out.println("파일 파일명 : " + item.getName() + "</br>");
                    
    				out.println("파일 컨텐츠 타입 : " + item.getContentType() + "</br>");
                    
    				out.println("파일 사이즈  : " + item.getSize()+ "</br>");
    				
    				// 브라우저별 파일명 전송 처리
                    
    				// 어떤 브라우저는 그 파일의 경로까지 다 포함하는 경우도 있고, 파일명만 쓰는 경우도 있다.
                    
    				//	d:\temp\a.png or a.png
    				
    				// 이걸쓰면 무적권 파일명만 리턴해줌
                    
    				String fileName = FilenameUtils.getName(item.getName());
    				
    				File saveFile = new File(fileSavePath, fileName);
    				
    				item.write(saveFile);
    				
    			}
    		}
    		
    				
    	}
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    </body>
    </html>

    댓글

Designed by Tistory.