첫째, 파일 업로드
파일 업로드 프로젝트 개발은 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 제어기 코드
- 첫 번째 세트에 응답하여 응답
- 파일을 읽기 -의 InputStream을
- 파일을 쓰기 -의 OutputStream를
- 작업을 수행
- 닫기 스트림 (첫 번째 스위치)
. 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 }
테스트를 실행