봄 부팅 (XVII) : 사용 봄 부팅 파일을 업로드

 

 

파일을 업로드하는 것은 종종 인터넷 응용 프로그램 시나리오 중 하나이며, 가장 일반적인 상황은 모든 사람이 오늘은 봄 부팅이 작은 사건을 업로드했다하는 사람들과, 등등 아바타를 업로드하고 있습니다.

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에서 봄으로 업그레이드되었습니다

샘플 코드 -github

샘플 코드 - 코드 클라우드

참조 :

봄 부팅 파일 업로드 예

 

; 기사에서 온다 https://www.cnblogs.com/ityouknow/p/8298344.html

파일을 업로드하는 것은 종종 인터넷 응용 프로그램 시나리오 중 하나이며, 가장 일반적인 상황은 모든 사람이 오늘은 봄 부팅이 작은 사건을 업로드했다하는 사람들과, 등등 아바타를 업로드하고 있습니다.

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에서 봄으로 업그레이드되었습니다

샘플 코드 -github

샘플 코드 - 코드 클라우드

참조 :

봄 부팅 파일 업로드 예

 

; 기사에서 온다 https://www.cnblogs.com/ityouknow/p/8298344.html

추천

출처www.cnblogs.com/JonaLin/p/11411696.html