SpringMVC (4 개) --- 파일 업로드 및 다운로드

첫째, 파일 업로드

파일 업로드 프로젝트 개발은 springMVC 좋은 지원 파일 업로드 할 수 있습니다, 가장 일반적인 기능 중 하나이지만, SpringMVC의 기본 컨텍스트 그러므로 기본적으로는 파일 업로드가 작동 처리 할 수없는, MultipartResolver가 장착되지 않은

당신이 봄의 파일 업로드 기능을 사용하려면 맥락에서 MultipartResolver를 구성해야

(1), 구성 파일 및 가이드 패킷

springmvc-servlet.xml에 프로파일 링을 위해

1 <! - 파일 업로드 구성 ->
 2      <빈 ID = "를 MultipartResolver"
 . 3 개            클래스 = "org.springframework.web.multipart.commons.CommonsMultipartResolver">
 . 4          . <속성 이름 = "defaultEncoding"값 = "UTF-8 "/>
 5          <! - 업로드 파일 크기 (바이트) 제한 (= 10,485,760 중 10M) ->
 . 6          <속성 이름 ="1048576 "/> maxUploadSize"= 값 "
 . 7          <속성 이름 ="maxInMemorySize "값 = "40960"/>
 . 8      </ 빈>

2 전단 upload.jsp

파일을 업로드하기 위해, 양식이 multipart / form-data하는 방법을 POST 및 PHP 버전으로 설정되어야합니다 만,이 경우, 브라우저는 파일 서버에 사용자가 선택됩니다 바이너리 데이터를 전송하는

1 <% 페이지의 contentType = @ "텍스트 / HTML; 문자셋 = UTF-8"언어 = "자바"%>
 2 <HTML>
 3 <body>
 4  
5 <form 조치 = "$ {} pageContext.request.contextPath / upload1 " 
 6                 에 enctype ="multipart / form-data "에있어서 ="POST ">
 7      <p>上传文件<입력 TYPE ="파일 "NAME ="파일 "/> </ p>
 8      <p> <input 타입 = 값 "제출"= "上传"> </ p>
 9 </ FORM>
 10  
11 </ body>
 12 </ HTML>

 

(1) 파일의 업로드 방법 스트림에 의해

@RequestParam은 ( "파일") 패키지 이름은 = 파일 CommonsMultipartFile 객체로 결과 파일을 제어, 배열이 대량 업로드 CommonsMultipartFile 비교 될 수있다

일반적인 방법을 CommonsMultipartFile :

  • 문자열 getOriginalFilename은 () : 이전에 파일을 업로드로 알려진 가져옵니다
  • 의 InputStream는 getInputStream는 () : 파일 스트림을 가져옵니다
  • transferTo (파일의 최종 도착를) 무효 : 파일 디렉토리를 업로드 할 파일을 저장

코드

. 1  @Controller
  공개  클래스 ControllerUpload {
 . 3  
. 4      @RequestMapping ( "/ upload1" )
 . (5)      공공 문자열 파일 업로드 (@RequestParam ( "파일" ) CommonsMultipartFile 파일,
 . 6                                           HttpServletRequest의 요청이) 발생 IOException가 {
 . 7  
. 8          // 1. 파일의 이름 가져 오기 
(9)          uploadName = 문자열 file.getOriginalFilename ();
 10          // 2. 파일 이름이 null의 경우 귀국한다 
(11).          IF ( "" .equals (uploadName)) {
 (12)가              복귀 "리디렉션 : /index.jsp";
 (13)이다          }
 14          에서 System.out.println ( "업로드 파일 이름 :"+ uploadName)
 (15)  
(16)          // 3. 업로드 경로 설정을 저장합니다 
(17).          Request.getServletContext 문자열 경로 = ()는 getRealPath ( "/를 WEB-INF는 / upload1. " );
 (18)          // 제 존재하지 않는 경로가 생성되는 경우 
. 19          파일 realpath = 새로운 새 파일 (경로)
 (20)는          IF ! ( ) {(realPath.exists)
 (21)는              , realPath.mkdir ()는
 22이다          }
 23는          System.out에. :에 println은 (+ "경로 이름 저장" ; realpath)
 24  
(25)          // 제 파일 입력 스트림 
26         =에서의 InputStream ) (file.getInputStream 단계;
27          // 6.文件输入流
(28)          의 FileOutputStream 아웃 = 새로운 FileOutputStream에 ( 새로운 파일 (realPath, uploadName));
29  
(30)          // 제读取
31          INT의 LEN = 0 ;
32          바이트 [] 바이트 = 새로운  바이트 [1024 ];
33          동안 (LEN (= in.read (바이트)) = -1! ) {
 34              out.write (바이트 0 렌);
35              out.flush ();
36          }
 37          out.close ();
38          in.close ();
39  
40          복귀 "리디렉션 : /success.jsp를" ;
41      }
 42 }

테스트를 실행

저장된 위치

(2) file.Transto의 사용은 업로드

코드

1  @Controller
 2  공용  클래스 {ControllerUpload
 3  
4      @RequestMapping ( "/ upload2" )
 5      공개 문자열 fileUpload2 (@RequestParam ( "파일" ) CommonsMultipartFile 파일 
 6                                         HttpServletRequest의 요청)을 발생 IOException가 {
 7  
8          // 上传路径保存设置
9          문자열 경로 request.getServletContext = () getRealPath ( "/ WEB-INF / upload2." );
10          파일 realPath = 파일 (경로);
11          만약 (! realPath.exists ()) {
(12)는              , realPath.mkdir ()
 (13)는          }
 14  
15          // 주소 업로드 파일 
16          에서 System.out.println ( "업로드 주소 저장 파일 :"+ realpath)
 . (17)  
(18)는          // CommonsMultipartFile의 방법으로 파일을 직접 쓰기 (이 시간 참고) 
. 19          file.transferTo ( 새로운 새 파일 (realpath +는 "/"+ file.getOriginalFilename ()))
 (20)는  
21가          리턴 "리디렉션 : /success.jsp" ;
 22이다      }
 23이다 }

[참고 포인트 : 여기에 우리가 성공적으로 업로드 인터페이스를 표시하는 방법은 두 가지가, 첫 번째는 나처럼, 성공적인 새로운 성공 .jsp로;

그리고 성공적으로 업로드가 성공적으로 인터페이스로 리디렉션 후. 당신이 돌아 오면 업로드에 성공한 후 직접 표시 할 수 있도록 두 번째는, 컨트롤러에서 JSON, 플러스 @ResponseBody를 실행하고 문장을 반환하는 것입니다]

둘째, 파일 다운로드

1 전면 download.jsp

 

1 <% @ 페이지의 contentType = "text / html과; 문자셋 = UTF-8"언어 = "자바"%>
 2 <HTML>
 3 <body>
 4  
5 <A HREF = "$ {} pageContext.request.contextPath / 다운로드 ">下载图片</a>를
 6  
7 </ body>
 8 </ HTML>

 

2 제어기 코드

  1. 첫 번째 세트에 응답하여 응답
  2. 파일을 읽기 -의 InputStream을
  3. 파일을 쓰기 -의 OutputStream를
  4. 작업을 수행
  5. 닫기 스트림 (첫 번째 스위치)
. 1  @Controller
 2  공용  클래스 ControllerDownload {
 . 3  
. 4      @RequestMapping ( "/ 다운로드 ' )
 . 5 개      공개 문자열 다운로드합니다 (HttpServletResponse를 응답) 발생 예외 {
 . 6  
. 7 개          // 1 주소를 이미지 다운로드 
. 8          문자열 경로 ="F : \\ 이미지 " ]
 . 9          문자열 fileName에 ="9.jpg " ;
 10  
.도 11          // 2. 응답 응답 헤더 
(12)는          response.reset (); // 설정 빈 버퍼 캐시되지 않은 페이지 
(13)가된다          response.setCharacterEncoding ("UTF-8 ".); // 문자 인코딩
14          response.setContentType ( "multipart / form-data"로); // 이진 송신 데이터
 (15)          // 3. 응답 헤더 
16          response.setHeader ( "콘텐츠 - 처리" ,
 17.                  "첨부] = fileName에"+를 URLEncoder.encode ( 파일명. "UTF-8" ));
 (18)은  
(19).          파일 파일 = 새로운 새 파일 (경로 fileName에)
 20 인          // 4. 파일을 판독 - 입력 스트림 
(21)이된다          InputStream 인 입력 = 새로운 새 FileInputStream에 (파일)
 (22)이다          // 5.. 출력 스트림 - 파일을 기록 
(23)은          OutputStream에 OUT = ; response.getOutputStream ()
 24  
25          바이트[] 버프 = 새로운  바이트 [1024 ];
26          INT의 인덱스 = 0 ;
(27)          // 제执行写出操作
28          동안 ((인덱스 = input.read (광)) = -1! ) {
 29              out.write (광, 0 , 인덱스);
30              out.flush ();
31          }
 32          out.close ();
33          input.close ();
34          반환  ;
35      }
 36 }

테스트를 실행

 

추천

출처www.cnblogs.com/tqsh/p/11297777.html