Spring Boot 2.X 实现文件上传(三)

使用 SpringBoot 项目完成单个、多个文件的上传处理,并将上传的文件保存到指定目录下。

代码演示案例

所有的 HTML 页面文件

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选择上传文件类型</title>
</head>
<script language="javascript">
    function single() {
        document.form1.action = "/singlefile";
        document.form1.submit();
    }

    function multi() {
        document.form1.action = "/multifile";
        document.form1.submit();
    }
</script>
<body>
<form name="form1" method="post">
    <input type="button" name="btn1" value="单个文件上传" onclick="single();">
    <input type="button" name="btn2" value="多个文件上传" onclick="multi();">
</form>
</body>
</html>

multifile.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>多文件上传</title>
</head>
<body>
<h1 th:inlines="text">多文件上传</h1>
<form action="/multiFileUpload" method="post" enctype="multipart/form-data">
    <p>选择文件1: <input type="file" name="fileName"/></p>
    <p>选择文件2: <input type="file" name="fileName"/></p>
    <p>选择文件3: <input type="file" name="fileName"/></p>
    <p><input type="submit" value="提交"/></p>
</form>
</body>
</html>

singlefile.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>单文件上传</title>
</head>
<body>
<h1 th:inlines="text">单文件上传</h1>
<form action="/singleFile" method="post" enctype="multipart/form-data">
    <p>文件:<input type="file" name="head_img"/></p>
    <p><input type="submit" value="上传"/></p>
</form>
</body>
</html>

逻辑代码

定义结果集

@Getter
@Setter
@ToString
public class Result implements Serializable {

    private boolean flag; //是否成功
    private Integer code; //返回码
    private String message;//返回信息

    public Result(boolean flag, Integer code, String message) {
        this.flag = flag;
        this.code = code;
        this.message = message;
    }
}

定义错误码
public class StatusCode {
    public static final int OK = 2000;       //成功
    public static final int ERROR = 4000;    //失败
}

逻辑代码
@Controller
@Slf4j
public class FileController {

    @Value("${file.path}")
    private String filePath;

    // 获取 singlefile.html 页面
    @RequestMapping(value = "/singlefile", method = RequestMethod.POST)
    public String single() {

        return "singlefile";
    }

    // 单文件上传
    @RequestMapping(value = "singleFile")
    @ResponseBody
    public Result uploadFile(@RequestParam("head_img") MultipartFile file, HttpServletRequest request) {

        if (file.isEmpty()) {
            return new Result(false, StatusCode.ERROR, "上传的文件大小为空,请检查!!");
        }

        //获取文件名称、后缀名、大小
        String fileName = file.getOriginalFilename();
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        long size = file.getSize();

        log.info("上传的文件名称为:[{}],文件后缀为:[{}],文件大小为:[{}]!!", fileName, suffixName, size);

        // 存储转换后文件名称
        fileName = UUID.randomUUID() + suffixName;
        log.info("转换后的文件名为:[{}]!!", fileName);

        File dest = new File(filePath + fileName);
        //判断父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }

        try {
            file.transferTo(dest);
            return new Result(true, StatusCode.OK, "上传成功!!");
        } catch (IOException e) {
            log.error("上传文件过程中发生异常!", e);
        }

        return new Result(true, StatusCode.ERROR, "上传失败!!");
    }

    // 获取 multifile.html 页面
    @RequestMapping("/multifile")
    public String multi() {

        return "multifile";
    }

    // 多文件上传
    @PostMapping(value = "multiFileUpload")
    @ResponseBody
    public Result multiFileUpload(HttpServletRequest request) {

        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("fileName");

        for (MultipartFile file : files) {

            if (file.isEmpty()) {
                return new Result(false, StatusCode.ERROR, "上传多个文件时,某个文件大小为空,请检查!!");
            } else {

                String fileName = file.getOriginalFilename();
                String suffixName = fileName.substring(fileName.lastIndexOf("."));
                long size = file.getSize();

                log.info("上传的文件名称为:[{}],文件后缀为:[{}],文件大小为:[{}]!!", fileName, suffixName, size);

                fileName = UUID.randomUUID() + suffixName;
                log.info("转换后的文件名为:[{}]!!", fileName);

                File dest = new File(filePath + fileName);
                if (!dest.getParentFile().exists()) {
                    dest.getParentFile().mkdir();
                }

                try {
                    file.transferTo(dest);
                } catch (IOException e) {
                    log.error("上传文件过程中发生异常!!", e);
                }

            }
        }
        return new Result(true, StatusCode.OK, "上传成功!!");
    }
}

application.properties
# 端口
server.port=8082
# 配置单个文件、多个文件大小
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
# 文件上传保存路径
file.path=E:/test/
# 取消模板文件缓存
spring.thymeleaf.cache=false

文件 结构目录

原文地址:https://www.cnblogs.com/miantiao312/p/11279829.html

时间: 2024-11-10 11:00:20

Spring Boot 2.X 实现文件上传(三)的相关文章

文件上传三:base64编码上传

介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,不喜欢不拿来说了. 优点: 1.浏览器可以马上展示图像,不需要先上传到服务端,减少服务端的垃圾图像 2.前端可以压缩.处理后上传到服务端,减少传输过程中的等待时间和服务器压力 缺点: 1.生成编码后保存成图片,倘若不做处理,会比原来的图片容量大,具体原因,搜索关键词:Base64编码为什么会使数据量变大 2.图片越大生成的编码越多,编码越多开发者工具中查看它时卡

文件上传三:FormData上传

介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,不喜欢不拿来说了. 等待编辑...

企业级 Spring Boot 教程 (十七)上传文件

这篇文章主要介绍,如何在springboot工程作为服务器,去接收通过http 上传的multi-file的文件. 构建工程 为例创建一个springmvc工程你需要spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依赖.为例能够上传文件在服务器,你需要在web.xml中加入标签做相关的配置,但在sringboot 工程中,它已经为你自动做了,所以不需要你做任何的配置. <dependencies> <dependency&

Spring Boot+BootStrap fileInput 多图片上传

一.依赖文件 <link rel="stylesheet" type="text/css" th:href="@{/js/bootstrap/css/bootstrap.css}"> <link rel="stylesheet" type="text/css" th:href="@{/js/bootstrap/fileinput/css/fileinput.css}"&

基于spring 3.0mvc 框架的文件上传实现

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Tiles.iText 和 POI.Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术.Spring MVC 分离了控制器.

Spring MVC笔记(七) springMVC文件上传

创建springMVC工程 SpringMVCFileUpload,导入springMVC相关jar以及commons-io.jar.commons-fileupload.jar: 创建springMVC默认配置文件 SpringMVCFileUpload-servlet.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework

Spring MVC4使用Servlet3 MultiPartConfigElement文件上传实例

在这篇文章中,我们将使用Spring MultipartResolver 实现 StandardServletMultipartResolver在Servlet3环境中实现单点和多文件上传功能.Spring提供了内置的multipart支持来处理Web应用程序文件上传. 简短的概述 在这篇文章中,我们将使用Servlet3.0以及javax.servlet.MultipartConfigElement,为了激活 Servlet3.0环境和Spring 的Multipart支持,你需要做以下: 1

Spring框架——day04参数校验和文件上传

一,参数校验 springmvc中我们可以使用第三方的校验框架来实现请求参数的校验,常用hibernate的校验框架validation 1.pom中导入所需依赖 hibernate-validator-4.3.2.Final.jar jboss-logging-3.1.0.CR2.jar validation-api-1.0.0.GA.jar 2.配置验证器 <!-- 配置验证器 --> <bean id="myvalidator" class="org.

Spring MVC(四)文件上传

文件上传步骤 1.写一个文件上传的页面 2.写一个文件上传的控制器 注意: 1.method="post" 2.enctype="multipart/form-data" 3.文件类型上传组件 type="file" 4.接收文件参数需要使用MultipartFile 类型的参数 5.配置文件解析器,文件解析器 id 必须是 "multipartResolver" 1 <%@ page language="ja