接收上传的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>

  

创建文件上传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
@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方法。

  • 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=128KB
spring.http.multipart.max-request-size=128KB

  

 

转载于:https://www.cnblogs.com/MaxElephant/p/10231949.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值