使用 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

文件 结构目录

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

  1. 从零开始的Spring Boot(3、Spring Boot静态资源和文件上传)

    Spring Boot静态资源和文件上传 写在前面 从零开始的Spring Boot(2.在Spring Boot中整合Servlet.Filter.Listener的方式) https://www. ...

  2. Spring Boot会员管理系统——处理文件上传

    温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使 ...

  3. spring boot下MultipartHttpServletRequest如何提高上传文件大小的默认值

    前言: 上传下载功能算是一个非常常见的功能,如果使用MultipartHttpServletRequest来做上传功能. 不配置上传大小的话,默认是2M.在有些场景,这个肯定不能满足条件. 上传代码: ...

  4. Spring提供的API实现文件上传

    Spring为我们提供了文件上传接口MultipartRequest及其实现类StandardMultipartFile StandardMultipartFile是StandardMultipart ...

  5. Ajax文件上传三式

    文件上传(三式) 1.urls.py文件 url(r'^upload.html$', views.upload), 2.views.py文件 import os def upload(request) ...

  6. 文件上传三:base64编码上传

    介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 优点: 1.浏览器可以马上展示图像,不需要先上 ...

  7. Spring Boot+BootStrap fileInput 多图片上传

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

  8. Spring中使用StandardServletMultipartResolver进行文件上传

    从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求,分别是:CommonsMultipartResolver和StandardSer ...

  9. spring mvc 3.0 实现文件上传功能

    http://club.jledu.gov.cn/?uid-5282-action-viewspace-itemid-188672 —————————————————————————————————— ...

随机推荐

  1. 关于solarwinds的一些介绍

    由于是给客户使用,作为运维人员自然是要安装测试一下的. solarwinds是一个付费的监控软件,部署起来很方便,加agent节点也很方便,除了监控主机,还可以监控网络流量,交换机等设备.由于并没有实 ...

  2. ie 图片拉伸

    终于发现只要设置img为 height:auto,width:auto,就不会出现这种情况了 img { height: auto; width: auto; }

  3. Redux DevTools Extension 的使用

    网址  https://github.com/zalmoxisus/redux-devtools-extension 1.const composeEnhancers = window.__REDUX ...

  4. 【leetcode】954. Array of Doubled Pairs

    题目如下: Given an array of integers A with even length, return true if and only if it is possible to re ...

  5. 云栖PPT下载 | 开源界大咖集体现身,开源数据库专场重点再回眸!

    阿里云开源数据库项目最新发布 阿里巴巴集团副总裁.阿里云智能数据库事业部总裁.高级研究员李飞飞(飞刀).阿里云数据库资深技术专家楼方鑫(黄忠)以及阿里云数据库技术专家傅宇(齐木)三位阿里云技术专家为大 ...

  6. sql 条件查询

    使用SELECT * FROM <表名>可以查询到一张表的所有记录.但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录,例如,查询分数在80分以上的学生记录. ...

  7. 51nod-1366 贫富差距——并查集

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1366 #include <iostream> # ...

  8. selenium工作的大概原理

    selenium的原理是什么? selenium的原理涉及到3个部分,分别是 浏览器 driver: 一般我们都会下载driver client: 也就是我们写的代码 client其实并不知道浏览器是 ...

  9. TortoiseGit密钥设置

    需要用到TortoiseGit的puttykey generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥. 1.    安装完成TortoiseGit后 ...

  10. .net 委托 +lamda表达式

    1.委托与类同级 想当于定义了一个类型 如 delegate int Sum(int a, int b);// 在声明类之前声明 2.这里可以在类里写个函数 public int sumAB(int ...