本文介绍如何在Spring Boot Web应用程序中上载文件。
http://www.mkyong.com/spring-boot/spring-boot-file-upload-example/
使用的工具 :
- Spring Boot 1.4.3.RELEASE
- 春季4.3.5.RELEASE
- Thymeleaf
- Maven的
- 嵌入式Tomcat 8.5.6
1.项目结构
标准的项目结构。

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 /

7.2选择一个文件并上传。

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

















