-
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>
'JSP' 카테고리의 다른 글
JSP- 파일 업로드(fileupload) 패키지 FileItem 클래스 (0) 2020.06.24 JSP - 파일 업로드(file upload) 루트 패스 설정 (0) 2020.06.24 JSP - 파일 업로드(file upload) 라이브러리 다운로드 경로 (0) 2020.06.24 JSP - 포워딩과 리다이렉트 (forwarding, redirect) (0) 2020.06.23 JSP - header 정보, 관련 메소드 (0) 2020.06.23