zoukankan      html  css  js  c++  java
  • 接收上传的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

      

     

  • 相关阅读:
    软件测试人员的年终绩效考核怎么应对
    收藏
    顶踩组件 前后两版
    订阅组件
    hdu 1963 Investment 完全背包
    hdu 4939 Stupid Tower Defense 动态规划
    hdu 4405 Aeroplane chess 动态规划
    cf 414B Mashmokh and ACM 动态规划
    BUPT 202 Chocolate Machine 动态规划
    hdu 3853 LOOPS 动态规划
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/10231949.html
Copyright © 2011-2022 走看看