
公园 - 云代码空间
——
这篇文章主要介绍,如何在springboot工程作为服务器,去接收通过http 上传的multi-file的文件。
为例创建一个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>
							 
						 | 
				
	
直接贴代码:
| 
						 
							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
						 
					 | 
					
						 
								@Controller
							 
							
								public class FileUploadController {
							 
							
								    private final StorageService storageService;
							 
							
								    @Autowired
							 
							
								    public FileUploadController(StorageService storageService) {
							 
							
								        this.storageService = storageService;
							 
							
								    }
							 
							
								    @GetMapping("/")
							 
							
								    public String listUploadedFiles(Model model) throws IOException {
							 
							
								        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
							 
							
								    public ResponseEntity<Resource> serveFile(@PathVariable String filename) {
							 
							
								        Resource file = storageService.loadAsResource(filename);
							 
							
								        return ResponseEntity
							 
							
								                .ok()
							 
							
								                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+file.getFilename()+"\"")
							 
							
								                .body(file);
							 
							
								    }
							 
							
								    @PostMapping("/")
							 
							
								    public String handleFileUpload(@RequestParam("file") MultipartFile file,
							 
							
								                                   RedirectAttributes redirectAttributes) {
							 
							
								        storageService.store(file);
							 
							
								        redirectAttributes.addFlashAttribute("message",
							 
							
								                "You successfully uploaded " + file.getOriginalFilename() + "!");
							 
							
								        return "redirect:/";
							 
							
								    }
							 
							
								    @ExceptionHandler(StorageFileNotFoundException.class)
							 
							
								    public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) {
							 
							
								        return ResponseEntity.notFound().build();
							 
							
								    }
							 
							
								}
							 
						 | 
				
	
	这个类通过@Controller注解,表明自己上一个Spring mvc的c。每个方法通过 
@GetMapping 或者@PostMapping注解表明自己的 http方法。
	为了展示上传文件的过程,我们做一个界面: 
在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
						 
						
							26
						 
					 | 
					
						 
								<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=128KB
							 
							
								spring.http.multipart.max-request-size=128KB
							 
						 | 
				
	
