JSP
1 <% - 2 인 IntelliJ의 IDEA 작성. 3 사용자 : GHH 4 날짜 : 2019년 9월 1일은 5 시간 : 14시 27분 6 변경하려면 이 템플릿을 사용 파일을 | 설정 | 파일 템플릿. 7 - %> 8 <% @ 페이지의 contentType = "text / html과; 문자셋 = UTF-8"언어 = "자바"%> 9 <HTML> 10 <head> 11 <TITLE>文件上传</ TITLE> 12 < / head> 13 <body> 14 <form 조치 = "$ {} pageContext.request.contextPath / UploadServelt은"METHOD = "POST"에 enctype = " <input 타입 = "파일"NAME = "이미지"ID = "이미지">로 <br> 16 <input 타입 = "제출"값 = "上传"> 17 </ FORM> 18 </ body> 19 </ HTML>
서블릿
패키지 com.ghh.upload; 수입 org.apache.commons.fileupload.FileItem; 수입 org.apache.commons.fileupload.FileItemFactory; 수입 org.apache.commons.fileupload.FileUploadException; 수입 org.apache.commons.fileupload.disk.DiskFileItemFactory; 수입 org.apache.commons.fileupload.servlet.ServletFileUpload; 수입 javax.servlet.ServletException; 수입 javax.servlet.annotation.WebServlet; 수입 인 javax.servlet.http.HttpServlet; 수입 나오는 javax.servlet.http.HttpServletRequest; 수입의 javax.servlet.http.HttpServletResponse; 수입 java.io.File에; 수입 java.io.FileOutputStream의; 수입 때 java.io.IOException; 수입 java.io.InputStream를; 수입 java.time.LocalDate; 수입은 java.util.List; 수입 java.util.UUID; / ** * @author GHH *의 @date 2019년 9월 1일 14시 32분 * @description * / @WebServlet (NAME = "UploadServelt은"urlPatterns = { "/ UploadServelt은"}) 공용 클래스에서 UploadServelt는 HttpServlet을 확장 { 보호 공극의 doPost (HttpServletRequest의 요청 HttpServletResponse를 대응) ServletException을 IOException을 {발생 의 doGet (요청, 응답); } 보호 공극의 doGet (HttpServletRequest의 요청 HttpServletResponse를 응답)을 ServletException이 발생 IOException을는 { 되는 InputStream는 = NULL이다; FileOutputStream에의 FileOutputStream = NULL; isMultipart = ServletFileUpload.isMultipartContent 부울 (요청); IF (! isMultipart) { 던져 RuntimeException의 새로운 새로운 ( "요청은 파일 업로드를 지원하지 않습니다"); } DiskFileItemFactory으로 menu_factory 새로운 새로운 DiskFileItemFactory = (); // 파일을 업로드 3M 이상의 임시 파일 큰 시작 디렉토리 itemFactory.setSizeThreshold (1024 * 3 * 1024); // 임시 파일 저장 디렉토리 지정 문자열 temppath = this.getServletContext ()를 getRealPath ( "/ 임시"); 에서 System.out.println ( "temppath ="+ temppath); TEMP = 새로운 새로운 파일 파일 (temppath); IF {(temp.exists ()!) temp.mkdirs (); } itemFactory.setRepository (TEMP); ServletFileUpload servletFileUpload = 새로운 ServletFileUpload (으로 menu_factory); 시도 { 목록 <FileItem> fileItems = servletFileUpload.parseRequest (요청); (FileItem fileItem : fileItems)에 대한 { 경우 (fileItem.isFormField ()) { //普通字段 문자열은 fieldName = fileItem.getFieldName (); 문자열 fileValue = fileItem.getString ( "UTF-8"); 에서 System.out.println (fieldName에 + "===="+ fileValue); } 다른 { 문자열 fileName에 = fileItem.getName (); 문자열 고통 = fileName.substring (fileName.lastIndexOf () "."); UUID UUID = UUID.randomUUID (); fileName에 UUID = + 고통; 에서 System.out.println ( 'FILENAME = "+ fileName에); // 얻을 입력 스트림은 IS = fileItem.getInputStream (); // 출력 스트림 생성 = this.getServletContext () getRealPath ( "/ 업로드"); 문자열로 // 날짜에 따라 다중 레벨 디렉토리 생성 이제 LOCALDATE LocalDate.now =을 (); INT 년 = now.getYear (); INT = 달 now.getMonthValue를 (); INT = now.getDayOfMonth의 날 (); 경로 = 경로 + Win32 시스템 + 년 + Win32 시스템 + + + 달 Win32 시스템 일; 에서 System.out.println ( "경로 ="+ 경로); // 상위 디렉토리를 생성 parentDir = 새로운 파일 (경로) 파일; IF {(parentDir.exists ()!) parentDir.mkdirs (); } 파일 파일 = 새로운 파일 (경로, fileName에); FileOutputStream에 = 새로운 FileOutputStream에 (파일); 바이트 [] 바이트 = 새로운 바이트 [1024]; INT LEN = -1; 반면 (! (= LEN is.read (바이트)) = - 1) { fileOutputStream.write (바이트 0 렌); } fileItem.delete (); } } } 캐치 (FileUploadException 전자) { e.printStackTrace (); } 마지막으로 { {시도 ) (is.close을; fileOutputStream.close (); } 캐치 (예외 전자) { e.printStackTrace (); } } } }