공유지 - fileupload.jar 업로드 파일의 JavaWeb 사용

첫째, 파일 업로드

  업로드 및 다운로드 파일은 많은 시스템에서 매우 일반적인 기능, 또는 소프트웨어를 자주 업로드하고 파일을 다운로드하는 데 사용됩니다

  업로드 된 파일은 다음 단계로 구분된다 :

  도 1은, 앞 페이지 POST 요청하는 방법이다 라벨 폼을 필요로;

  2 양식 ENCTYPE 속성 태그에 추가되어야하며, 상기 속성 값은 다중 / 폼 데이터 값이어야;

  (3) 형태의 입력 타입 = 파일 태그를 이용하여 업로드 된 파일을 추가하는 단계;

  도 4는, 기록 코드 서버 (서블릿 프로그램)는 데이터 업로드 과정에 의해 수신.

    주의 사항 :

      GET 요청은 길이 제한을 가지고 있기 때문에 1. 요청은 포스트해야합니다;

      2. ENCTYPE = 다중 / 폼 데이터를 다중 세그먼트의 형태로 전송 된 데이터 (각 데이터 세그먼트에 대한 단일 테이블) 접합 후 이진 스트림의 형태로 서버에 전송을 나타내고;

      3. 데이터는 서버 측의 스트리밍에 의해 수신되어야한다;

둘째, 지침은 HTTP 프로토콜의 파일을 업로드하기

    

세, 풍경-fileupload.jar 공통 API 

   참고 : 공유지 - fileupload.jar 패키지는 평민이-io.jar 봉투,이 프로젝트에이 개 패키지를 도입하는 것이 필요하다 의존한다.

  1, 일반적으로 사용되는 API

표 FileItemFactory 하나의 팩토리 인터페이스 
ServletFileUpload 파일 업로드 클래스 분석 데이터 업로드 
FileItem 항목 유형 테이블을 각 테이블 항목 나타내는 
부울 ServletFileUpload.isMultipartContent (HttpServletRequest의 요청) 현재 데이터, 데이터 조각의 복수의 포맷을 업로드 다단 여부를 판단 이 방법에 사용하는 공개 목록 <FileItem> parseRequest은 (HttpServletRequest의 요청) 업로드 데이터 분석은, 리턴 목록 컬렉션은 개별 테이블을 포함 FileItem.isFormField 부울 ()은 통상의 단일 테이블, 또는 업로드 된 파일인지, 현재의 양식 항목을 결정 거짓 업로드 파일 형식, 유형, 진정한 양식 항목의 일반 유형 나타내는 문자열 FileItem.getFieldName () 형태 항목 이름 속성 값을 가져옵니다 문자열 FileItem.getString ()는 현재 양식 항목의 값을 가져옵니다; 문자열 FileItem.getName는 () 업로드를 가져옵니다을 파일 이름 매개 변수 파일 액세스가 가리키는 하드 디스크 위치에 기록 파일을 업로드 할 수 무효 FileItem.write (파일)

  

  2 흐름도

      

넷째, 경우

  양식 업로드 :

1 <= "UploadServelt은"METHOD = "POST"에 enctype = "multipart / form-data"로 형태로 동작>
 2    <input 타입 = "텍스트"이름 = "이름"/>로 <br> :用户名
 3    照片: <input 타입 = '파일'이름 = "사진">로 <br>
 4    <input 타입 값 = '제출'= "上传">
 5 </ FORM>

 

  데이터 파싱 서블릿 업로드

(1 개)  수입 org.apache.commons.fileupload.FileItem;
 수입 org.apache.commons.fileupload.FileItemFactory;
3  수입 org.apache.commons.fileupload.disk.DiskFileItemFactory;
4  가져 오기 org.apache.commons.fileupload.servlet.ServletFileUpload;
5  
6  수입 javax.servlet.ServletException;
7  수입 인 javax.servlet.http.HttpServlet;
8  가져 나오는 javax.servlet.http.HttpServletRequest;
9  수입 의 javax.servlet.http.HttpServletResponse;
10  수입 java.io.File에;
(11)  수입때 java.io.IOException;
 12은  임포트 된 java.util.List;
 13은  
14 개  공용  클래스 UploadServelt은 (가) 확장 HttpServlet을 {
 15      보호  보이드 의 doPost는 (HttpServletRequest의 요청이 상기 HttpServletResponse를 응답) 발생 , IOException가 ServletException을가 {
 16          // 중국어 왜곡을 해결 
. 17          Request.setCharacterEncoding를 ( " . 8 UTF " )
 (18)는  
19.          // 제 1 데이터는 데이터의 여러 개 (복수의 데이터 세그먼트 만, 파일이 업로드) 업로드 여부를 결정 
(20)는          만약에 (ServletFileUpload.isMultipartContent (요청)) {
 21 인  
22              // 만들기 FileItemFactory 팩토리 구현 클래스
(23)는              FileItemFactory FileItemFactory = 새로운 새로운 DiskFileItemFactory ();
 24              // 2. 도구 분석 데이터 업로드 만들기 
25              ServletFileUpload ServletFileUpload = 새로운 새로운 ServletFileUpload (FileItemFactory을),
 (26)은  
27              은 try {
 28                  // 각각을주고, 3. 분석 데이터 업로드 테이블 항목 FiltItem 
29                  일람 <FileItem> 목록 = servletFileUpload.parseRequest (요청)
 (30)  
(31)가된다                  // 각 항목 공통 유형, 또는 파일을 업로드하는 테이블주기 결정 
32                  합니다 (FileItem FileItem :리스트) {
 33는  
34이다                      // 일반 양식 항목 
35                      IF(FileItem.isFormField ()) {
 36                          문자열도 fieldName = fileItem.getFieldName ();
 37                          문자열 값 = fileItem.getString ( "UTF-8." )
 (38)는  
39                          에서 System.out.println ( "의 속성 이름 = 값 테이블 항목" + 도 fieldName)
 40                          에서 System.out.println ( "개별 테이블 값 속성 값 ="+ 값)
 41                      } 다른 {
 42이다                          // 업로드 파일 
(43)은                          문자열 이름 = ; fileItem.getFieldName ()
 (44)는                          문자열의 fieldName = FileItem .getName ();
(45)  
(46)은                          에서 System.out.println ( "양식 항목 이름 속성 값 ="+ 이름)
 (47)                          에서 System.out.println ( "업로드 파일 이름 ="+ 도 fieldName);
 48 개  
(49 개)                          // 특정 위치에 기록 데이터 
50                          fileItem.write ( 새로운 새 파일 ( "F : \\"+ fileItem.getName ()))
 (51)이다                      }
 52이다                  }
 53는  
54이다              } 캐치 (예외 E) {
 55                  e.printStackTrace ();
 56이다              }
 (57)는  
58          }
 59  
60 
61      }

 

  참고 :

    이러한 업로드이 문제, 당신은 파일 이름 앞에 밀리 초에 현재 시간을 추가 할 수 있습니다를 해결하기 위해, 원본 파일 업로드를 덮어 쓰게됩니다 파일을 업로드 한 후, 같은 이름으로 같은 유형의 여러 파일을 업로드하는 작은 문제가있다 할 수 있습니다.

  파일 커버 방지, 데이터 저장소는 이러한 접근 방식은 다음 변경 될 수 있습니다 :

fileItem.write (새 파일 ( "F : \\"+에 System.currentTimeMillis () + fileItem.getName ()));

  

 

추천

출처www.cnblogs.com/niujifei/p/12448294.html