一、pom文件依赖的添加
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
|
@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(); } } |
三、实现的service层
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
@Service public class FileSystemStorageService implements StorageService { private final Path rootLocation; @Autowired public FileSystemStorageService(StorageProperties properties) { this .rootLocation = Paths.get(properties.getLocation()); } @Override public void store(MultipartFile file) { try { if (file.isEmpty()) { throw new StorageException( "Failed to store empty file " + file.getOriginalFilename()); } Files.copy(file.getInputStream(), this .rootLocation.resolve(file.getOriginalFilename())); } catch (IOException e) { throw new StorageException( "Failed to store file " + file.getOriginalFilename(), e); } } @Override public Stream<Path> loadAll() { try { return Files.walk( this .rootLocation, 1 ) .filter(path -> !path.equals( this .rootLocation)) .map(path -> this .rootLocation.relativize(path)); } catch (IOException e) { throw new StorageException( "Failed to read stored files" , e); } } @Override public Path load(String filename) { return rootLocation.resolve(filename); } @Override public Resource loadAsResource(String filename) { try { Path file = load(filename); Resource resource = new UrlResource(file.toUri()); if (resource.exists() || resource.isReadable()) { return resource; } else { throw new StorageFileNotFoundException( "Could not read file: " + filename); } } catch (MalformedURLException e) { throw new StorageFileNotFoundException( "Could not read file: " + filename, e); } } @Override public void deleteAll() { FileSystemUtils.deleteRecursively(rootLocation.toFile()); } @Override public void init() { try { Files.createDirectory(rootLocation); } catch (IOException e) { throw new StorageException( "Could not initialize storage" , e); } } } |
四、在application.properties文件上配置上传的属性
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB
五、服务启动时的处理
六、测试成功的结果
以上这篇基于SpringBoot上传任意文件功能的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。