构建工程
为例创建一个springmvc工程你需要spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依赖。为例能够上传文件在服务器,你需要在web.xml中加入标签做相关的配置,但在sringboot 工程中,它已经为你自动做了,所以不需要你做任何的配置。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <dependencies>      <dependency>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-web</artifactId>      </dependency>      <dependency>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-test</artifactId>          <scope>test</scope>      </dependency>      <dependency>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-thymeleaf</artifactId>      </dependency>  </dependencies> | 
创建文件上传controller
直接贴代码:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | @ControllerpublicclassFileUploadController {    privatefinalStorageService storageService;    @Autowired    publicFileUploadController(StorageService storageService) {        this.storageService = storageService;    }    @GetMapping("/")    publicString listUploadedFiles(Model model) throwsIOException {        model.addAttribute("files", storageService                .loadAll()                .map(path ->                        MvcUriComponentsBuilder                                .fromMethodName(FileUploadController.class, "serveFile", path.getFileName().toString())                                .build().toString())                .collect(Collectors.toList()));        return"uploadForm";    }    @GetMapping("/files/{filename:.+}")    @ResponseBody    publicResponseEntity<Resource> serveFile(@PathVariableString filename) {        Resource file = storageService.loadAsResource(filename);        returnResponseEntity                .ok()                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+file.getFilename()+"\"")                .body(file);    }    @PostMapping("/")    publicString handleFileUpload(@RequestParam("file") MultipartFile file,                                   RedirectAttributes redirectAttributes) {        storageService.store(file);        redirectAttributes.addFlashAttribute("message",                "You successfully uploaded "+ file.getOriginalFilename() + "!");        return"redirect:/";    }    @ExceptionHandler(StorageFileNotFoundException.class)    publicResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) {        returnResponseEntity.notFound().build();    }} | 
这个类通过@Controller注解,表明自己上一个Spring mvc的c。每个方法通过 
@GetMapping 或者@PostMapping注解表明自己的 http方法。
- GET / 获取已经上传的文件列表
- GET /files/{filename} 下载已经存在于服务器的文件
- POST / 上传文件给服务器
创建一个简单的 html模板
为了展示上传文件的过程,我们做一个界面: 
在src/main/resources/templates/uploadForm.html
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <html xmlns:th="http://www.thymeleaf.org"><body>    <div th:if="${message}">        <h2 th:text="${message}"/>    </div>    <div>        <form method="POST"enctype="multipart/form-data"action="/">            <table>                <tr><td>File to upload:</td><td><input type="file"name="file"/></td></tr>                <tr><td></td><td><input type="submit"value="Upload"/></td></tr>            </table>        </form>    </div>    <div>        <ul>            <li th:each="file : ${files}">                <a th:href="${file}"th:text="${file}"/>            </li>        </ul>    </div></body></html> | 
上传文件大小限制
如果需要限制上传文件的大小也很简单,只需要在springboot 工程的src/main/resources/application.properties 加入以下:
| 1 2 | spring.http.multipart.max-file-size=128KBspring.http.multipart.max-request-size=128KB | 
