本文介绍如何在Spring Boot Web应用程序中上载文件。

http://www.mkyong.com/spring-boot/spring-boot-file-upload-example/

使用的工具 :

  1. Spring Boot 1.4.3.RELEASE
  2. 春季4.3.5.RELEASE
  3. Thymeleaf
  4. Maven的
  5. 嵌入式Tomcat 8.5.6

1.项目结构

标准的项目结构。

Spring Boot文件上传示例_spring

2.项目依赖

Spring启动依赖,不需要额外的文件上传库。

pom.xml中

<span style="color:#000000"><code class="language-markup"><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>project</span> <span style="color:#669900">xmlns</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>http:///POM/4.0.0<span style="color:#999999">"</span></span>
         <span style="color:#669900">xmlns:xsi</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>http://www.w3.org/2001/XMLSchema-instance<span style="color:#999999">"</span></span>
         <span style="color:#669900">xsi:schemaLocation</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>http:///POM/4.0.0
         http:///maven-v4_0_0.xsd<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
         <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>modelVersion</span><span style="color:#999999">></span></span>4.0.0<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>modelVersion</span><span style="color:#999999">></span></span>

    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>groupId</span><span style="color:#999999">></span></span>com.mkyong<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>groupId</span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>artifactId</span><span style="color:#999999">></span></span>spring-boot-file-upload<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>artifactId</span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>packaging</span><span style="color:#999999">></span></span>jar<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>packaging</span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>version</span><span style="color:#999999">></span></span>1.0<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>version</span><span style="color:#999999">></span></span>

    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>parent</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>groupId</span><span style="color:#999999">></span></span>org.springframework.boot<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>groupId</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>artifactId</span><span style="color:#999999">></span></span>spring-boot-starter-parent<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>artifactId</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>version</span><span style="color:#999999">></span></span>1.4.3.RELEASE<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>version</span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>parent</span><span style="color:#999999">></span></span>

    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>properties</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>java.version</span><span style="color:#999999">></span></span>1.8<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>java.version</span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>properties</span><span style="color:#999999">></span></span>

    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>dependencies</span><span style="color:#999999">></span></span>

        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>dependency</span><span style="color:#999999">></span></span>
            <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>groupId</span><span style="color:#999999">></span></span>org.springframework.boot<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>groupId</span><span style="color:#999999">></span></span>
            <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>artifactId</span><span style="color:#999999">></span></span>spring-boot-starter-thymeleaf<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>artifactId</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>dependency</span><span style="color:#999999">></span></span>

        <span style="color:#708090"><!-- hot swapping, disable cache for template, enable live reload --></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>dependency</span><span style="color:#999999">></span></span>
            <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>groupId</span><span style="color:#999999">></span></span>org.springframework.boot<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>groupId</span><span style="color:#999999">></span></span>
            <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>artifactId</span><span style="color:#999999">></span></span>spring-boot-devtools<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>artifactId</span><span style="color:#999999">></span></span>
            <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>optional</span><span style="color:#999999">></span></span>true<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>optional</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>dependency</span><span style="color:#999999">></span></span>

    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>dependencies</span><span style="color:#999999">></span></span>

    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>build</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>plugins</span><span style="color:#999999">></span></span>
            <span style="color:#708090"><!-- Package as an executable jar/war --></span>
            <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>plugin</span><span style="color:#999999">></span></span>
                <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>groupId</span><span style="color:#999999">></span></span>org.springframework.boot<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>groupId</span><span style="color:#999999">></span></span>
                <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>artifactId</span><span style="color:#999999">></span></span>spring-boot-maven-plugin<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>artifactId</span><span style="color:#999999">></span></span>
            <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>plugin</span><span style="color:#999999">></span></span>
        <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>plugins</span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>build</span><span style="color:#999999">></span></span>

<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>project</span><span style="color:#999999">></span></span>
</code></span>

复制

3.文件上传示例

Spring启动文件上传,零配置。

3.1在Controller中,将上传的文件映射到 MultipartFile

UploadController.java

<span style="color:#000000"><code class="language-java"><span style="color:#0077aa">package</span> com<span style="color:#999999">.</span>mkyong<span style="color:#999999">.</span>controller<span style="color:#999999">;</span>

<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>stereotype<span style="color:#999999">.</span>Controller<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>bind<span style="color:#999999">.</span>annotation<span style="color:#999999">.</span>GetMapping<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>bind<span style="color:#999999">.</span>annotation<span style="color:#999999">.</span>PostMapping<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>bind<span style="color:#999999">.</span>annotation<span style="color:#999999">.</span>RequestParam<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>multipart<span style="color:#999999">.</span>MultipartFile<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>servlet<span style="color:#999999">.</span>mvc<span style="color:#999999">.</span>support<span style="color:#999999">.</span>RedirectAttributes<span style="color:#999999">;</span>

<span style="color:#0077aa">import</span> java<span style="color:#999999">.</span>io<span style="color:#999999">.</span>IOException<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> java<span style="color:#999999">.</span>nio<span style="color:#999999">.</span>file<span style="color:#999999">.</span>Files<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> java<span style="color:#999999">.</span>nio<span style="color:#999999">.</span>file<span style="color:#999999">.</span>Path<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> java<span style="color:#999999">.</span>nio<span style="color:#999999">.</span>file<span style="color:#999999">.</span>Paths<span style="color:#999999">;</span>

<span style="color:#999999">@Controller</span>
<span style="color:#0077aa">public</span> <span style="color:#0077aa">class</span> UploadController <span style="color:#999999">{</span>

    <span style="color:#708090">//Save the uploaded file to this folder</span>
    <span style="color:#0077aa">private</span> <span style="color:#0077aa">static</span> String UPLOADED_FOLDER <span style="color:#a67f59">=</span> <span style="color:#669900">"F://temp//"</span><span style="color:#999999">;</span>

    <span style="color:#999999">@GetMapping</span><span style="color:#999999">(</span><span style="color:#669900">"/"</span><span style="color:#999999">)</span>
    <span style="color:#0077aa">public</span> String <span style="color:#dd4a68">index</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
        <span style="color:#0077aa">return</span> <span style="color:#669900">"upload"</span><span style="color:#999999">;</span>
    <span style="color:#999999">}</span>

    <span style="color:#999999">@PostMapping</span><span style="color:#999999">(</span><span style="color:#669900">"/upload"</span><span style="color:#999999">)</span> <span style="color:#708090">// //new annotation since 4.3</span>
    <span style="color:#0077aa">public</span> String <span style="color:#dd4a68">singleFileUpload</span><span style="color:#999999">(</span><span style="color:#999999">@RequestParam</span><span style="color:#999999">(</span><span style="color:#669900">"file"</span><span style="color:#999999">)</span> MultipartFile file<span style="color:#999999">,</span>
                                   RedirectAttributes redirectAttributes<span style="color:#999999">)</span> <span style="color:#999999">{</span>

        <span style="color:#0077aa">if</span> <span style="color:#999999">(</span>file<span style="color:#999999">.</span><span style="color:#dd4a68">isEmpty</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
            redirectAttributes<span style="color:#999999">.</span><span style="color:#dd4a68">addFlashAttribute</span><span style="color:#999999">(</span><span style="color:#669900">"message"</span><span style="color:#999999">,</span> <span style="color:#669900">"Please select a file to upload"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
            <span style="color:#0077aa">return</span> <span style="color:#669900">"redirect:uploadStatus"</span><span style="color:#999999">;</span>
        <span style="color:#999999">}</span>

        <span style="color:#0077aa">try</span> <span style="color:#999999">{</span>

            <span style="color:#708090">// Get the file and save it somewhere</span>
            <span style="color:#0077aa">byte</span><span style="color:#999999">[</span><span style="color:#999999">]</span> bytes <span style="color:#a67f59">=</span> file<span style="color:#999999">.</span><span style="color:#dd4a68">getBytes</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
            Path path <span style="color:#a67f59">=</span> Paths<span style="color:#999999">.</span><span style="color:#dd4a68">get</span><span style="color:#999999">(</span>UPLOADED_FOLDER <span style="color:#a67f59">+</span> file<span style="color:#999999">.</span><span style="color:#dd4a68">getOriginalFilename</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
            Files<span style="color:#999999">.</span><span style="color:#dd4a68">write</span><span style="color:#999999">(</span>path<span style="color:#999999">,</span> bytes<span style="color:#999999">)</span><span style="color:#999999">;</span>

            redirectAttributes<span style="color:#999999">.</span><span style="color:#dd4a68">addFlashAttribute</span><span style="color:#999999">(</span><span style="color:#669900">"message"</span><span style="color:#999999">,</span>
                    <span style="color:#669900">"You successfully uploaded '"</span> <span style="color:#a67f59">+</span> file<span style="color:#999999">.</span><span style="color:#dd4a68">getOriginalFilename</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#a67f59">+</span> <span style="color:#669900">"'"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>

        <span style="color:#999999">}</span> <span style="color:#0077aa">catch</span> <span style="color:#999999">(</span>IOException e<span style="color:#999999">)</span> <span style="color:#999999">{</span>
            e<span style="color:#999999">.</span><span style="color:#dd4a68">printStackTrace</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
        <span style="color:#999999">}</span>

        <span style="color:#0077aa">return</span> <span style="color:#669900">"redirect:/uploadStatus"</span><span style="color:#999999">;</span>
    <span style="color:#999999">}</span>

    <span style="color:#999999">@GetMapping</span><span style="color:#999999">(</span><span style="color:#669900">"/uploadStatus"</span><span style="color:#999999">)</span>
    <span style="color:#0077aa">public</span> String <span style="color:#dd4a68">uploadStatus</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
        <span style="color:#0077aa">return</span> <span style="color:#669900">"uploadStatus"</span><span style="color:#999999">;</span>
    <span style="color:#999999">}</span>

<span style="color:#999999">}</span>
</code></span>

复制

3.2在thymeleaf中,只是一些普通的HTML文件标签。

upload.jsp

<span style="color:#000000"><code class="language-markup"><span style="color:#708090"><!DOCTYPE html></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>html</span> <span style="color:#669900">xmlns:th</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>http://www.thymeleaf.org<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>body</span><span style="color:#999999">></span></span>

<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>h1</span><span style="color:#999999">></span></span>Spring Boot file upload example<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>h1</span><span style="color:#999999">></span></span>

<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>form</span> <span style="color:#669900">method</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>POST<span style="color:#999999">"</span></span> <span style="color:#669900">action</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>/upload<span style="color:#999999">"</span></span> <span style="color:#669900">enctype</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>multipart/form-data<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>input</span> <span style="color:#669900">type</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>file<span style="color:#999999">"</span></span> <span style="color:#669900">name</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>file<span style="color:#999999">"</span></span> <span style="color:#999999">/></span></span><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>br</span><span style="color:#999999">/></span></span><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>br</span><span style="color:#999999">/></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>input</span> <span style="color:#669900">type</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>submit<span style="color:#999999">"</span></span> <span style="color:#669900">value</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>Submit<span style="color:#999999">"</span></span> <span style="color:#999999">/></span></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>form</span><span style="color:#999999">></span></span>

<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>body</span><span style="color:#999999">></span></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>html</span><span style="color:#999999">></span></span>
</code></span>

复制

3.3上传状态的另一页面

uploadStatus.jsp

<span style="color:#000000"><code class="language-markup"><span style="color:#708090"><!DOCTYPE html></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>html</span> <span style="color:#669900">lang</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>en<span style="color:#999999">"</span></span> <span style="color:#669900">xmlns:th</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>http://www.thymeleaf.org<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>body</span><span style="color:#999999">></span></span>

<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>h1</span><span style="color:#999999">></span></span>Spring Boot - Upload Status<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>h1</span><span style="color:#999999">></span></span>

<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>div</span> <span style="color:#669900">th:if</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>${message}<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
    <span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>h2</span> <span style="color:#669900">th:text</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>${message}<span style="color:#999999">"</span></span><span style="color:#999999">/></span></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>div</span><span style="color:#999999">></span></span>

<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>body</span><span style="color:#999999">></span></span>
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>html</span><span style="color:#999999">></span></span>
</code></span>

复制

4.超出最大上传大小

要处理超出最大上传大小的异常,请声明@ControllerAdvice并捕获MultipartException

GlobalExceptionHandler.java

<span style="color:#000000"><code class="language-java"><span style="color:#0077aa">package</span> com<span style="color:#999999">.</span>mkyong<span style="color:#999999">.</span>controller<span style="color:#999999">;</span>

<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>bind<span style="color:#999999">.</span>annotation<span style="color:#999999">.</span>ControllerAdvice<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>bind<span style="color:#999999">.</span>annotation<span style="color:#999999">.</span>ExceptionHandler<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>multipart<span style="color:#999999">.</span>MultipartException<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>web<span style="color:#999999">.</span>servlet<span style="color:#999999">.</span>mvc<span style="color:#999999">.</span>support<span style="color:#999999">.</span>RedirectAttributes<span style="color:#999999">;</span>

<span style="color:#999999">@ControllerAdvice</span>
<span style="color:#0077aa">public</span> <span style="color:#0077aa">class</span> GlobalExceptionHandler <span style="color:#999999">{</span>

    <span style="color:#708090">//https://jira.spring.io/browse/SPR-14651</span>
    <span style="color:#708090">//Spring 4.3.5 supports RedirectAttributes</span>
    <span style="color:#999999">@ExceptionHandler</span><span style="color:#999999">(</span>MultipartException<span style="color:#999999">.</span><span style="color:#0077aa">class</span><span style="color:#999999">)</span>
    <span style="color:#0077aa">public</span> String <span style="color:#dd4a68">handleError1</span><span style="color:#999999">(</span>MultipartException e<span style="color:#999999">,</span> RedirectAttributes redirectAttributes<span style="color:#999999">)</span> <span style="color:#999999">{</span>

        redirectAttributes<span style="color:#999999">.</span><span style="color:#dd4a68">addFlashAttribute</span><span style="color:#999999">(</span><span style="color:#669900">"message"</span><span style="color:#999999">,</span> e<span style="color:#999999">.</span><span style="color:#dd4a68">getCause</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">.</span><span style="color:#dd4a68">getMessage</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
        <span style="color:#0077aa">return</span> <span style="color:#669900">"redirect:/uploadStatus"</span><span style="color:#999999">;</span>

    <span style="color:#999999">}</span>

    <span style="color:#708090">/* Spring < 4.3.5
	@ExceptionHandler(MultipartException.class)
    public String handleError2(MultipartException e) {

        return "redirect:/errorPage";

    }*/</span>

<span style="color:#999999">}</span>
</code></span>

复制

5. Tomcat连接重置

如果部署到Tomcat,请配置maxSwallowSize以避免此Tomcat连接重置问题。对于嵌入式Tomcat,声明TomcatEmbeddedServletContainerFactory如下:

SpringBootWebApplication.java

<span style="color:#000000"><code class="language-java"><span style="color:#0077aa">package</span> com<span style="color:#999999">.</span>mkyong<span style="color:#999999">;</span>

<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>coyote<span style="color:#999999">.</span>http11<span style="color:#999999">.</span>AbstractHttp11Protocol<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>boot<span style="color:#999999">.</span>SpringApplication<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>boot<span style="color:#999999">.</span>autoconfigure<span style="color:#999999">.</span>SpringBootApplication<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>boot<span style="color:#999999">.</span>context<span style="color:#999999">.</span>embedded<span style="color:#999999">.</span>tomcat<span style="color:#999999">.</span>TomcatConnectorCustomizer<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>boot<span style="color:#999999">.</span>context<span style="color:#999999">.</span>embedded<span style="color:#999999">.</span>tomcat<span style="color:#999999">.</span>TomcatEmbeddedServletContainerFactory<span style="color:#999999">;</span>
<span style="color:#0077aa">import</span> org<span style="color:#999999">.</span>springframework<span style="color:#999999">.</span>context<span style="color:#999999">.</span>annotation<span style="color:#999999">.</span>Bean<span style="color:#999999">;</span>

<span style="color:#999999">@SpringBootApplication</span>
<span style="color:#0077aa">public</span> <span style="color:#0077aa">class</span> SpringBootWebApplication <span style="color:#999999">{</span>

    <span style="color:#0077aa">private</span> <span style="color:#0077aa">int</span> maxUploadSizeInMb <span style="color:#a67f59">=</span> <span style="color:#990055">10</span> <span style="color:#a67f59">*</span> <span style="color:#990055">1024</span> <span style="color:#a67f59">*</span> <span style="color:#990055">1024</span><span style="color:#999999">;</span> <span style="color:#708090">// 10 MB</span>

    <span style="color:#0077aa">public</span> <span style="color:#0077aa">static</span> <span style="color:#0077aa">void</span> <span style="color:#dd4a68">main</span><span style="color:#999999">(</span>String<span style="color:#999999">[</span><span style="color:#999999">]</span> args<span style="color:#999999">)</span> <span style="color:#0077aa">throws</span> Exception <span style="color:#999999">{</span>
        SpringApplication<span style="color:#999999">.</span><span style="color:#dd4a68">run</span><span style="color:#999999">(</span>SpringBootWebApplication<span style="color:#999999">.</span><span style="color:#0077aa">class</span><span style="color:#999999">,</span> args<span style="color:#999999">)</span><span style="color:#999999">;</span>
    <span style="color:#999999">}</span>

    <span style="color:#708090">//Tomcat large file upload connection reset</span>
    <span style="color:#708090">//http://www.mkyong.com/spring/spring-file-upload-and-connection-reset-issue/</span>
    <span style="color:#999999">@Bean</span>
    <span style="color:#0077aa">public</span> TomcatEmbeddedServletContainerFactory <span style="color:#dd4a68">tomcatEmbedded</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>

        TomcatEmbeddedServletContainerFactory tomcat <span style="color:#a67f59">=</span> <span style="color:#0077aa">new</span> TomcatEmbeddedServletContainerFactory<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>

        tomcat<span style="color:#999999">.</span><span style="color:#dd4a68">addConnectorCustomizers</span><span style="color:#999999">(</span><span style="color:#999999">(</span>TomcatConnectorCustomizer<span style="color:#999999">)</span> connector <span style="color:#a67f59">-</span><span style="color:#a67f59">></span> <span style="color:#999999">{</span>
            <span style="color:#0077aa">if</span> <span style="color:#999999">(</span><span style="color:#999999">(</span>connector<span style="color:#999999">.</span><span style="color:#dd4a68">getProtocolHandler</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#0077aa">instanceof</span> AbstractHttp11Protocol<span style="color:#a67f59"><</span><span style="color:#a67f59">?</span><span style="color:#a67f59">></span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
                <span style="color:#708090">//-1 means unlimited</span>
                <span style="color:#999999">(</span><span style="color:#999999">(</span>AbstractHttp11Protocol<span style="color:#a67f59"><</span><span style="color:#a67f59">?</span><span style="color:#a67f59">></span><span style="color:#999999">)</span> connector<span style="color:#999999">.</span><span style="color:#dd4a68">getProtocolHandler</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">.</span><span style="color:#dd4a68">setMaxSwallowSize</span><span style="color:#999999">(</span><span style="color:#a67f59">-</span><span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
            <span style="color:#999999">}</span>
        <span style="color:#999999">}</span><span style="color:#999999">)</span><span style="color:#999999">;</span>

        <span style="color:#0077aa">return</span> tomcat<span style="color:#999999">;</span>

    <span style="color:#999999">}</span>

<span style="color:#999999">}</span>
</code></span>

复制

6.多部分文件大小

默认情况下,Spring Boot最大文件上传大小为1MB,您可以通过以下应用程序属性配置值:

application.properties

<span style="color:#000000"><code class="language-bash"><span style="color:#708090">#http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties</span>
<span style="color:#708090">#search multipart</span>
spring.http.multipart.max-file-size<span style="color:#a67f59">=</span>10MB
spring.http.multipart.max-request-size<span style="color:#a67f59">=</span>10MB
</code></span>

复制

7.演示

使用默认的嵌入式Tomcat启动Spring Boot mvn spring-boot:run。

终奌站

<span style="color:#000000"><code class="language-bash">$ mvn spring-boot:run
 <span style="color:#0077aa">.</span>   ____          _            __ _ _
 /\\ / ___<span style="color:#669900">'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '</span>_ <span style="color:#a67f59">|</span> <span style="color:#669900">'_| | '</span>_ \/ _` <span style="color:#a67f59">|</span> \ \ \ \
 \\/  ___<span style="color:#999999">)</span><span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span>_<span style="color:#999999">)</span><span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span> <span style="color:#a67f59">||</span> <span style="color:#999999">(</span>_<span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span>  <span style="color:#999999">)</span> <span style="color:#999999">)</span> <span style="color:#999999">)</span> <span style="color:#999999">)</span>
  '  <span style="color:#a67f59">|</span>____<span style="color:#a67f59">|</span> .__<span style="color:#a67f59">|</span>_<span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span>_<span style="color:#a67f59">|</span>_<span style="color:#a67f59">|</span> <span style="color:#a67f59">|</span>_\__, <span style="color:#a67f59">|</span> / / / /
 <span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">=</span><span style="color:#a67f59">|</span>_<span style="color:#a67f59">|</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">==</span><span style="color:#a67f59">|</span>___/<span style="color:#a67f59">=</span>/_/_/_/
 :: Spring Boot ::        <span style="color:#999999">(</span>v1.4.3.RELEASE<span style="color:#999999">)</span>
 
2017-01-21 07:48:53 INFO  com.mkyong.SpringBootWebApplication - Starting SpringBootWebApplication on MKYONG-WIN10 with PID 2384 <span style="color:#999999">(</span>E:\spring-boot-file-upload\target\classes started by mkyong <span style="color:#0077aa">in</span> E:\spring-boot-file-upload<span style="color:#999999">)</span>
2017-01-21 07:48:53 DEBUG com.mkyong.SpringBootWebApplication - Running with Spring Boot v1.4.3.RELEASE, Spring v4.3.5.RELEASE
2017-01-21 07:48:53 INFO  com.mkyong.SpringBootWebApplication - No active profile set, falling back to default profiles: default
2017-01-21 07:48:55 INFO  com.mkyong.SpringBootWebApplication - Started SpringBootWebApplication <span style="color:#0077aa">in</span> 2.54 seconds <span style="color:#999999">(</span>JVM running <span style="color:#0077aa">for</span> 2.924<span style="color:#999999">)</span>
</code></span>

复制

7.1访问http:// localhost:8080 /

Spring Boot文件上传示例_f5_02

7.2选择一个文件并上传。

Spring Boot文件上传示例_java_03

7.3选择大于10mb的文件,您将访问此页面。

Spring Boot文件上传示例_java_04