날짜별로 버퍼되지 않은 파일 저장을위한 공유지 - 파일 업로드

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 (); 
            } 

        } 

    } 
}

  

 

추천

출처www.cnblogs.com/gaohuanhuan/p/11442416.html