`
zysnba
  • 浏览: 185766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用Spring Boot上传文件

 
阅读更多
1、pom包配置

我们使用Spring Boot最新版本1.5.9、jdk使用1.8、tomcat8.0。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

引入了spring-boot-starter-thymeleaf做页面模板引擎,写一些简单的上传示例。
2、启动类设置

@SpringBootApplication
public class FileUploadWebApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(FileUploadWebApplication.class, args);
    }

    //Tomcat large file upload connection reset
    @Bean
    public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
            if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
                //-1 means unlimited
                ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
            }
        });
        return tomcat;
    }

}

tomcatEmbedded这段代码是为了解决,上传文件大于10M出现连接重置的问题。此异常内容GlobalException也捕获不到。

详细内容参考:Tomcat large file upload connection reset
3、编写前端页面

上传页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<h1>Spring Boot file upload example</h1>
<form method="POST" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file" /><br/><br/>
    <input type="submit" value="Submit" />
</form>
</body>
</html>

非常简单的一个Post请求,一个选择框选择文件,一个提交按钮,效果如下:

上传结果展示页面:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<h1>Spring Boot - Upload Status</h1>
<div th:if="${message}">
    <h2 th:text="${message}"/>
</div>
</body>
</html>

效果图如下:

4、编写上传控制类

访问localhost自动跳转到上传页面:

@GetMapping("/")
public String index() {
    return "upload";
}

上传业务处理

@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    if (file.isEmpty()) {
        redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
        return "redirect:uploadStatus";
    }

    try {
        // Get the file and save it somewhere
        byte[] bytes = file.getBytes();
        Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
        Files.write(path, bytes);

        redirectAttributes.addFlashAttribute("message",
                "You successfully uploaded '" + file.getOriginalFilename() + "'");

    } catch (IOException e) {
        e.printStackTrace();
    }

    return "redirect:/uploadStatus";
}

上面代码的意思就是,通过MultipartFile读取文件信息,如果文件为空跳转到结果页并给出提示;如果不为空读取文件流并写入到指定目录,最后将结果展示到页面。

MultipartFile是Spring上传文件的封装类,包含了文件的二进制流和文件属性等信息,在配置文件中也可对相关属性进行配置,基本的配置信息如下:

    spring.http.multipart.enabled=true #默认支持文件上传.
    spring.http.multipart.file-size-threshold=0 #支持文件写入磁盘.
    spring.http.multipart.location= # 上传文件的临时目录
    spring.http.multipart.max-file-size=1Mb # 最大支持文件大小
    spring.http.multipart.max-request-size=10Mb # 最大支持请求大小

最常用的是最后两个配置内容,限制文件上传大小,上传时超过大小会抛出异常:

更多配置信息参考这里:Common application properties
5、异常处理

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MultipartException.class)
    public String handleError1(MultipartException e, RedirectAttributes redirectAttributes) {
        redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());
        return "redirect:/uploadStatus";
    }
}

设置一个@ControllerAdvice用来监控Multipart上传的文件大小是否受限,当出现此异常时在前端页面给出提示。利用@ControllerAdvice可以做很多东西,比如全局的统一异常处理等,感兴趣的同学可以下来了解。
6、总结

这样一个使用Spring Boot上传文件的简单Demo就完成了,感兴趣的同学可以将示例代码下载下来试试吧。
分享到:
评论

相关推荐

    使用Spring Boot上传文件功能

    使用 Spring Boot 上传文件功能 本文将对 Spring Boot 上传文件功能进行详细的讲解,包括项目配置、启动类设置、前端页面编写等方面的内容。 一、项目配置 在使用 Spring Boot 上传文件功能之前,需要在 pom.xml ...

    Spring boot 示例 官方 Demo

    spring-boot-file-upload:使用Spring Boot 上传文件示例 spring-boot-fastDFS:Spring Boot 整合FastDFS示例 spring-boot-actuator:Spring Boot Actuator 使用示例 spring-boot-admin-simple:Spring Boot Admin ...

    spring boot 42讲配套源码.zip

    第 2-6 课:使用 Spring Boot 和 Thymeleaf 演示上传文件/spring-boot-file-upload 第 2-7 课:使用 Spring Boot 上传文件到 FastDFS/spring-boot-fastDFS 第 2-8 课: Spring Boot 构建一个 RESTful Web 服务/...

    spring boot上传文件出错问题如何解决

    在 Spring Boot 项目中,上传文件时可能会出现 org.springframework.web.multipart.MultipartException 异常,这是因为 Spring Boot 在上传文件时使用了临时文件,临时文件的存储路径默认在 /tmp 目录下。...

    spring boot搭建文件服务器解决同时上传多个图片和下载的问题

    开发者可以使用@RequestPart注解指定上传文件的参数,例如@PostMapping(value = "/upload", consumes = {"multipart/form-data"})等。 知识点3:文件上传逻辑实现 在文件上传过程中,需要对上传的文件进行处理,...

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

    1. **文件大小限制**:Spring Boot默认会限制上传文件的大小,你可以通过配置`spring.servlet.multipart.max-file-size`和`spring.servlet.multipart.max-request-size`来调整限制。 2. **文件验证**:在实际应用中...

    spring boot 文件上传实例

    在Spring Boot框架中,文件上传是一项常见的功能,它允许用户通过Web应用程序上传各种类型的文件,如图片、文档等。在本实例中,我们将探讨如何在Spring Boot中实现一个简单的文件上传功能。 首先,我们需要在...

    Spring Boot + thymeleaf 实现文件上传下载功能

    首先,我们需要创建一个上传文件的控制器,用于处理文件上传请求。然后,我们需要创建一个文件列表展示页面,用于展示所有上传的文件,并提供下载链接。 在文件列表展示页面中,我们可以使用 Thymeleaf 模板引擎来...

    基于SpringBoot的文件上传系统,前后端分离,单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传

    前端采用 vue.js + plupload + element-ui 实现了文件在浏览器端的发送, 后端采用 spring boot + spring + spring mvc + mybatis 实现了文件在服务器端的接收和存储。 采用前后端分离的方式进行开发,实现了几种...

    Spring Boot 文件上传原理解析

    `CommonsMultipartResolver`实现了`MultipartResolver`接口,能够解析多部分请求并将其转换为`MultipartHttpServletRequest`对象,该对象包含了所有上传文件的详细信息。 在Spring MVC的传统配置中,我们需要在`...

    tus-spring-boot

    1. 文件上传接口:根据tus协议规范,定义了上传文件的URL和HTTP方法。 2. 断点续传存储:服务端需要存储每个文件的部分数据,以便于恢复上传。这通常涉及到持久化存储,如数据库或文件系统。 3. 上传状态管理:跟踪...

    Java Spring Boot应用程序中实现文件上传和下载功能

    ### Java Spring Boot应用程序中实现文件上传和下载功能 在现代Web开发中,文件上传与下载是常见的需求之一。Spring Boot框架提供了简洁的方式帮助开发者轻松实现这些功能。本文将详细介绍如何在Spring Boot项目中...

    基于Spring Boot的文件管理系统,支持文件上传,下载,删除

    基于Spring Boot的文件管理系统,支持文件上传,下载,删除等操作,在线浏览文件列表及基本信息等操作。部署简单,Java课程设计必备。 依赖软件: 1、jdk1.8+ 2、maven 开发调试方法: 解压压缩包,导入IDE,...

    spring boot 实现文件上传

    在Spring Boot中,通常会使用`@PostMapping`注解来定义处理POST请求的方法,并使用`@RequestParam("file") MultipartFile file`来接收上传的文件。例如: ```java import org.springframework.web.bind.annotation....

    Spring boot整合MinIO客户端实现文件管理

    上传文件 下载文件 读取桶列表 读取桶中的文件列表 删除桶 删除文件 Spring boot整合MinIO客户端实现文件管理 Spring boot整合MinIO客户端实现文件管理 Spring boot整合MinIO客户端实现文件管理 Spring boot整合...

    spring-boot2.0全新教程实例20例.zip

    - [spring-boot-file-upload](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-file-upload):使用 Spring Boot 上传文件示例 - [spring-boot-fastDFS]...

    基于idea spring boot图片的上传和下载

    对于文件上传,我们需要添加`MultipartFile`支持,这通常通过Spring Boot的`spring-boot-starter-web`依赖来提供。确保`pom.xml`或`build.gradle`文件中包含以下依赖: ```xml &lt;!-- Maven --&gt; &lt;groupId&gt;org....

    使用Spring Boot处理大文件上传有哪些技巧?

    在Spring Boot中处理大文件上传时,可以采用多种技巧以提高性能和用户体验。 通过配置CommonsMultipartResolver来设置文件大小限制,并创建文件存储服务来管理文件的保存和组合。分片上传是处理超大文件的关键,它...

    Springboot实现文件上传

    关于文件路径,Spring Boot允许我们在配置文件中定义一个目录作为上传文件的存储位置,例如: ```properties spring.servlet.multipart.location=/path/to/your/upload/folder ``` 这里要确保该路径在服务器上是可写...

    spring boot ueditor 文件上传 调试通过

    在本文中,我们将深入探讨如何在Spring Boot框架中与UEditor集成实现文件上传功能,并确保其调试通过。首先,我们要了解Spring Boot是一个基于Java的轻量级框架,它简化了创建独立、生产级别的Spring应用程序的过程...

Global site tag (gtag.js) - Google Analytics