Spring Boot 第17篇:上传文件

转载 2018年04月17日 09:17:44

这篇文章主要介绍,如何在springboot工程作为服务器,去接收通过http 上传的multi-file的文件。

构建工程

为例创建一个springmvc工程你需要spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依赖。为例能够上传文件在服务器,你需要在web.xml中加入标签做相关的配置,但在sringboot 工程中,它已经为你自动做了,所以不需要你做任何的配置。

<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

直接贴代码:

@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

<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 加入以下:

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

测试

测试情况如图:

参考资料

https://spring.io/guides/gs/uploading-files/

源码下载

https://github.com/forezp/SpringBootLearning

在VC中实现程序在启动时隐藏

    最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。    对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.s...
  • AttaBoy
  • AttaBoy
  • 2002-03-03 09:18:00
  • 1205

(29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

文件上传主要分以下几个步骤: (1)新建maven java project; (2)在pom.xml加入相应依赖; (3)新建一个表单页面(这里使用thymleaf); (4)编写contr...
  • gebitan505
  • gebitan505
  • 2017-02-10 10:14:16
  • 640

Spring Boot 文件上传

使用SpringBoot进行文件上传的方法和SpringMVC差不多,本文单独新建一个最简单的DEMO来说明一下。 主要步骤包括: 1、创建一个springboot项目工程,本例名称(demo-u...
  • catoop
  • catoop
  • 2017-03-11 13:56:21
  • 32214

Spring Boot Web应用开发 文件上传

一、Spring Boot 默认使用springMVC包装好的解析器进行上传 二、添加代码          文件:       上传" />       @Controller@RequestMap...
  • Jerome_s
  • Jerome_s
  • 2017-01-25 16:52:47
  • 1915

spring-boot上传文件最佳解决办法

很多人使用springboot上传文件的时候最烦的就是上传路径的问题 下面的方法最便捷 最易懂在配置文件中配置如下xcloud: #uploadPath: D:/var/uploaded_file...
  • u014174854
  • u014174854
  • 2018-03-05 15:57:19
  • 261

详细全面的Spring Boot文件上传

最近再看Spring Boot 就想做一个文件上传的url。 如图:文件目录如下: 在这里 为什么不把文件上传到resources里,因为上传到这里 必须重新启项目,才能生效,所以 新建了we...
  • qq_37355731
  • qq_37355731
  • 2017-08-09 10:05:53
  • 366

详细全面的 SpringBoot 文件上传

这些天忙着刷题,又怕遗忘了spring boot, 所以抽出一点时间折腾折腾,加深点印象。 spring boot 的文件上传与 spring mvc 的文件上传基本一致,只需注意一些配置即可。...
  • change_on
  • change_on
  • 2017-03-02 15:42:02
  • 41152

spring boot 文件上传

spring mvc 不暴露response进行文件下载. package cn.netinnet.billServer.aop; import java.io.File; import jav...
  • w329636271
  • w329636271
  • 2016-11-28 15:25:54
  • 1024

Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

转载来源http://blog.csdn.net/linxingliang/article/details/52077816 文件上传主要分以下几个步骤: (1)新建maven java ...
  • shanshan_blog
  • shanshan_blog
  • 2017-02-23 17:18:02
  • 1886

使用Spring Boot搭建文件上传服务

一:服务端 pom.xml
  • mn960mn
  • mn960mn
  • 2016-03-10 11:23:57
  • 5369
收藏助手
不良信息举报
您举报文章:Spring Boot 第17篇:上传文件
举报原因:
原因补充:

(最多只允许输入30个字)