파일을 업로드하는 것은 종종 인터넷 응용 프로그램 시나리오 중 하나이며, 가장 일반적인 상황은 모든 사람이 오늘은 봄 부팅이 작은 사건을 업로드했다하는 사람들과, 등등 아바타를 업로드하고 있습니다.
1 패키지 구성 POM
우리는 봄 부트 버전 2.1.0, JDK 1.8, 톰캣 8.0을 사용합니다.
<부모>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 스타터 부모 </ artifactId를>
<version>은 2.1.0.RELEASE </ 버전>
</ 부모>
<속성>
<자바 .version> 1.8 </java.version>
</ 속성>
<의존성>
<의존성>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 스타터 웹 </ artifactId를>
</ 의존성>
<의존성>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 스타터 thymeleaf </ artifactId를>
</ 의존성>
<의존성>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 DevTools로 </ artifactId를>
<선택> 진정한 </ 옵션>
</ 의존성>
</ 의존성>
도입 spring-boot-starter-thymeleaf
, 페이지 템플릿 엔진을 몇 가지 간단한 업로드 예제를 작성.
2 배치 기동 클래스
@SpringBootApplication 공용 클래스 FileUploadWebApplication { 공공 정적 무효 메인 (문자열 [] 인수)이 발생 예외 { SpringApplication.run (. FileUploadWebApplication 클래스 , 인수)를; } @Bean 공개 TomcatServletWebServerFactory tomcatEmbedded () { TomcatServletWebServerFactory 톰캣 = 새로운 TomcatServletWebServerFactory (); tomcat.addConnectorCustomizers ((TomcatConnectorCustomizer) 커넥터 -> { 경우 ((connector.getProtocolHandler () instanceof를AbstractHttp11Protocol <?> )) { // -1 수단 무제한 ((AbstractHttp11Protocol) connector.getProtocolHandler ()) setMaxSwallowSize (-1 <?>. ); } }); 반환 바람둥이; } }
해결하기 tomcatEmbedded 코드, 업로드 파일보다 큰 10M 연결 문제를 재설정합니다. 이 예외는 내용 GlobalException을하지 캡처합니다.
세부 사항 참조 : 톰캣 큰 파일 업로드의 RESET 연결
(3) 앞 페이지 쓰기
업로드 페이지
<! DOCTYPE HTML> <HTML의 xmlns = "http://www.thymeleaf.org"번째> <body> <H1> 스프링 부팅 파일 업로드 예 </ H1> <form 방법 = "POST"조치 = "/ 업로드 "에 enctype ="multipart / form-data "로> <input 타입 ="파일 "NAME ="파일 "/> <BR/> <BR/> <INPUT TYPE ="제출 "값 ="제출 "/> </ 양식 > </ BODY> </ HTML>
다음과 같이 제출 버튼을 선택 매우 간단한 요청을, 파일 선택 상자를 게시, 효과는 다음과 같습니다
결과 표시 페이지를 업로드 :
<! DOCTYPE HTML>
<HTML LANG = "EN"의 xmlns = "http://www.thymeleaf.org"일>
<BODY>
<H1> 봄 부팅 - 업로드 상태 </ H1>
<DIV 일 : 만약 = " 메시지 $ {} ">
<H2 : 제 텍스트 ="$ {} 메시지 "/>
</ div>
</ BODY>
</ HTML>
다음과 같은 효과가 있습니다 :
네, 준비 업로드 컨트롤 클래스
액세스가 자동으로 업로드 페이지로 이동 로컬 호스트 :
( "/"@GetMapping ) 공공 문자열 색인 () { 반환 "업로드" ; }
비즈니스 프로세스를 업로드
( "/ 업로드"@PostMapping ) 공공 문자열 singleFileUpload (@RequestParam ( "파일" )의 MultipartFile 파일, RedirectAttributes redirectAttributes) { 경우 (file.isEmpty ()) { redirectAttributes.addFlashAttribute ( "메시지"를, "업로드 할 파일을 선택하세요 " ); 반환 : "uploadStatus 리디렉션" ; } 시도 { // 파일을 가져 어딘가에 저장 으로 바이트 바이트 =의 [] ) (file.getBytes; 패스 경로 = Paths.get (UPLOADED_FOLDER + file.getOriginalFilename ()); Files.write (경로, redirectAttributes.addFlashAttribute ( "메시지" , ' ""+ file.getOriginalFilename () + "당신은 성공적으로 업로드' ' ); } 캐치 (IOException이 전자) { e.printStackTrace (); } 반환 "리디렉션 : / uploadStatus를" ; }
위의 코드가 있다는 것을 의미 MultipartFile
당신은 스트리밍 지정된 디렉토리에 기록하지 않는 경우, 최종 결과가 파일을 읽을 수 빈 페이지가 표시됩니다; 파일이 검색 결과 페이지 및 프롬프트에 빈 점프 경우, 파일 정보를 읽는.
MultipartFile
래퍼 클래스의 봄 업로드 된 파일이며, 정보 이진 스트림 파일은 다음과 같이 파일, 구성 파일에 기본 구성 정보를 관련 속성을 구성 할 수 속성을 포함 :
spring.http.multipart.enabled=true
# 기본 지원 파일 업로드.spring.http.multipart.file-size-threshold=0
# 지원 파일은 디스크에 기록.spring.http.multipart.location=
# 임시 디렉토리에 파일을 업로드하기spring.http.multipart.max-file-size=1Mb
# 지원되는 최대 파일 크기spring.http.multipart.max-request-size=10Mb
# 최대 지원 요청 크기
가장 일반적으로 사용되는 지난 2 개 구성 내용이며, 파일 업로드 크기 제한, 업로드 할 때 크기가 예외가 발생합니다 초과 :
여기에 더 많은 구성 정보 참조 : 공용 속성 파일 응용 프로그램
5, 예외 처리
@ControllerAdvice 공공 클래스 GlobalExceptionHandler { @ExceptionHandler (MultipartException. 클래스 ) 공공 문자열 handleError1 (MultipartException 전자, RedirectAttributes redirectAttributes) { redirectAttributes.addFlashAttribute ( "메시지" , e.getCause ()의 getMessage ().); 반환 "리디렉션 : / uploadStatus를" ; } }
세트 @ControllerAdvice
을 모니터링 Multipart
업로드 파일 크기이 첫 페이지 프롬프트 때 이상이 발생, 제한된다. 사용 @ControllerAdvice
등의 글로벌 통합 예외 처리와 같은 것들을 많이 할 수는, 관심있는 학생들은 아래로 이해할 수있다.
도 6은, 합산
봄 부팅 업로드를 사용하여 이러한 간단한 데모가 완료, 관심있는 학생들은 그것을 시도 할 수있는 샘플 코드를 다운로드 할 수 있습니다.
제의 콘텐츠는 부팅 2.x에서 봄으로 업그레이드되었습니다
참조 :
파일을 업로드하는 것은 종종 인터넷 응용 프로그램 시나리오 중 하나이며, 가장 일반적인 상황은 모든 사람이 오늘은 봄 부팅이 작은 사건을 업로드했다하는 사람들과, 등등 아바타를 업로드하고 있습니다.
1 패키지 구성 POM
우리는 봄 부트 버전 2.1.0, JDK 1.8, 톰캣 8.0을 사용합니다.
<부모>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 스타터 부모 </ artifactId를>
<version>은 2.1.0.RELEASE </ 버전>
</ 부모>
<속성>
<자바 .version> 1.8 </java.version>
</ 속성>
<의존성>
<의존성>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 스타터 웹 </ artifactId를>
</ 의존성>
<의존성>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 스타터 thymeleaf </ artifactId를>
</ 의존성>
<의존성>
<의 groupId> org.springframework.boot </의 groupId>
<artifactId를> 스프링 부팅 DevTools로 </ artifactId를>
<선택> 진정한 </ 옵션>
</ 의존성>
</ 의존성>
도입 spring-boot-starter-thymeleaf
, 페이지 템플릿 엔진을 몇 가지 간단한 업로드 예제를 작성.
2 배치 기동 클래스
@SpringBootApplication 공용 클래스 FileUploadWebApplication { 공공 정적 무효 메인 (문자열 [] 인수)이 발생 예외 { SpringApplication.run (. FileUploadWebApplication 클래스 , 인수)를; } @Bean 공개 TomcatServletWebServerFactory tomcatEmbedded () { TomcatServletWebServerFactory 톰캣 = 새로운 TomcatServletWebServerFactory (); tomcat.addConnectorCustomizers ((TomcatConnectorCustomizer) 커넥터 -> { 경우 ((connector.getProtocolHandler () instanceof를AbstractHttp11Protocol <?> )) { // -1 수단 무제한 ((AbstractHttp11Protocol) connector.getProtocolHandler ()) setMaxSwallowSize (-1 <?>. ); } }); 반환 바람둥이; } }
해결하기 tomcatEmbedded 코드, 업로드 파일보다 큰 10M 연결 문제를 재설정합니다. 이 예외는 내용 GlobalException을하지 캡처합니다.
세부 사항 참조 : 톰캣 큰 파일 업로드의 RESET 연결
(3) 앞 페이지 쓰기
업로드 페이지
<! DOCTYPE HTML> <HTML의 xmlns = "http://www.thymeleaf.org"번째> <body> <H1> 스프링 부팅 파일 업로드 예 </ H1> <form 방법 = "POST"조치 = "/ 업로드 "에 enctype ="multipart / form-data "로> <input 타입 ="파일 "NAME ="파일 "/> <BR/> <BR/> <INPUT TYPE ="제출 "값 ="제출 "/> </ 양식 > </ BODY> </ HTML>
다음과 같이 제출 버튼을 선택 매우 간단한 요청을, 파일 선택 상자를 게시, 효과는 다음과 같습니다
결과 표시 페이지를 업로드 :
<! DOCTYPE HTML>
<HTML LANG = "EN"의 xmlns = "http://www.thymeleaf.org"일>
<BODY>
<H1> 봄 부팅 - 업로드 상태 </ H1>
<DIV 일 : 만약 = " 메시지 $ {} ">
<H2 : 제 텍스트 ="$ {} 메시지 "/>
</ div>
</ BODY>
</ HTML>
다음과 같은 효과가 있습니다 :
네, 준비 업로드 컨트롤 클래스
액세스가 자동으로 업로드 페이지로 이동 로컬 호스트 :
( "/"@GetMapping ) 공공 문자열 색인 () { 반환 "업로드" ; }
비즈니스 프로세스를 업로드
( "/ 업로드"@PostMapping ) 공공 문자열 singleFileUpload (@RequestParam ( "파일" )의 MultipartFile 파일, RedirectAttributes redirectAttributes) { 경우 (file.isEmpty ()) { redirectAttributes.addFlashAttribute ( "메시지"를, "업로드 할 파일을 선택하세요 " ); 반환 : "uploadStatus 리디렉션" ; } 시도 { // 파일을 가져 어딘가에 저장 으로 바이트 바이트 =의 [] ) (file.getBytes; 패스 경로 = Paths.get (UPLOADED_FOLDER + file.getOriginalFilename ()); Files.write (경로, redirectAttributes.addFlashAttribute ( "메시지" , ' ""+ file.getOriginalFilename () + "당신은 성공적으로 업로드' ' ); } 캐치 (IOException이 전자) { e.printStackTrace (); } 반환 "리디렉션 : / uploadStatus를" ; }
위의 코드가 있다는 것을 의미 MultipartFile
당신은 스트리밍 지정된 디렉토리에 기록하지 않는 경우, 최종 결과가 파일을 읽을 수 빈 페이지가 표시됩니다; 파일이 검색 결과 페이지 및 프롬프트에 빈 점프 경우, 파일 정보를 읽는.
MultipartFile
래퍼 클래스의 봄 업로드 된 파일이며, 정보 이진 스트림 파일은 다음과 같이 파일, 구성 파일에 기본 구성 정보를 관련 속성을 구성 할 수 속성을 포함 :
spring.http.multipart.enabled=true
# 기본 지원 파일 업로드.spring.http.multipart.file-size-threshold=0
# 지원 파일은 디스크에 기록.spring.http.multipart.location=
# 임시 디렉토리에 파일을 업로드하기spring.http.multipart.max-file-size=1Mb
# 지원되는 최대 파일 크기spring.http.multipart.max-request-size=10Mb
# 최대 지원 요청 크기
가장 일반적으로 사용되는 지난 2 개 구성 내용이며, 파일 업로드 크기 제한, 업로드 할 때 크기가 예외가 발생합니다 초과 :
여기에 더 많은 구성 정보 참조 : 공용 속성 파일 응용 프로그램
5, 예외 처리
@ControllerAdvice 공공 클래스 GlobalExceptionHandler { @ExceptionHandler (MultipartException. 클래스 ) 공공 문자열 handleError1 (MultipartException 전자, RedirectAttributes redirectAttributes) { redirectAttributes.addFlashAttribute ( "메시지" , e.getCause ()의 getMessage ().); 반환 "리디렉션 : / uploadStatus를" ; } }
세트 @ControllerAdvice
을 모니터링 Multipart
업로드 파일 크기이 첫 페이지 프롬프트 때 이상이 발생, 제한된다. 사용 @ControllerAdvice
등의 글로벌 통합 예외 처리와 같은 것들을 많이 할 수는, 관심있는 학생들은 아래로 이해할 수있다.
도 6은, 합산
봄 부팅 업로드를 사용하여 이러한 간단한 데모가 완료, 관심있는 학생들은 그것을 시도 할 수있는 샘플 코드를 다운로드 할 수 있습니다.
제의 콘텐츠는 부팅 2.x에서 봄으로 업그레이드되었습니다
참조 :