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
文件 结构目录
Spring Boot 2.X 实现文件上传(三)的更多相关文章
- 从零开始的Spring Boot(3、Spring Boot静态资源和文件上传)
Spring Boot静态资源和文件上传 写在前面 从零开始的Spring Boot(2.在Spring Boot中整合Servlet.Filter.Listener的方式) https://www. ...
- Spring Boot会员管理系统——处理文件上传
温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使 ...
- spring boot下MultipartHttpServletRequest如何提高上传文件大小的默认值
前言: 上传下载功能算是一个非常常见的功能,如果使用MultipartHttpServletRequest来做上传功能. 不配置上传大小的话,默认是2M.在有些场景,这个肯定不能满足条件. 上传代码: ...
- Spring提供的API实现文件上传
Spring为我们提供了文件上传接口MultipartRequest及其实现类StandardMultipartFile StandardMultipartFile是StandardMultipart ...
- Ajax文件上传三式
文件上传(三式) 1.urls.py文件 url(r'^upload.html$', views.upload), 2.views.py文件 import os def upload(request) ...
- 文件上传三:base64编码上传
介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 优点: 1.浏览器可以马上展示图像,不需要先上 ...
- Spring Boot+BootStrap fileInput 多图片上传
一.依赖文件 <link rel="stylesheet" type="text/css" th:href="@{/js/bootstrap/c ...
- Spring中使用StandardServletMultipartResolver进行文件上传
从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求,分别是:CommonsMultipartResolver和StandardSer ...
- spring mvc 3.0 实现文件上传功能
http://club.jledu.gov.cn/?uid-5282-action-viewspace-itemid-188672 —————————————————————————————————— ...
随机推荐
- 微信小程序の小程序事件流
一.什么是事件? 事件是视图层到逻辑层的通讯方式:事件可以将用户的行为,反馈到逻辑层进行处理:事件可以绑定在组件上,触发事件后,就会执行逻辑层中对应的事件处理函数:事件对象可以携带额外信息. 二.事件 ...
- WPF textbox 鼠标滚动更新日期,text文本值更改
/// <summary> /// 选择日期 /// </summary> private void RQTxt_MouseWheel(object sender, Mouse ...
- Nginx+Keepalived高可用集群应用实践
Nginx+Keepalived高可用集群应用实践 1.Keepalived高可用软件 1.1 Keepalived服务的三个重要功能 1.1.1管理LVS负载均衡软件 早期的LVS软件,需要通过命令 ...
- Nodejs进阶:密码加盐
原理:就是在密码特定位置插入特定字符串后,再对修改后的字符串进行md5运算. demo var crypto=require("crypto"); function cryptPw ...
- kubeadm部署k8s集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 kubeadm ini ...
- 使用springBoot和mybatis整合时出现如下错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)解决方案
在pom.xml文件中添加如下: <build> <resources> <resource> & ...
- 「CTS2019 | CTSC2019」氪金手游 解题报告
「CTS2019 | CTSC2019」氪金手游 降 智 好 题 ... 考场上签到失败了,没想容斥就只打了20分暴力... 考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中 ...
- 【dart学习】-- Dart之函数
1. 指定返回值得函数 /** * 无返回值的函数 * params: 可以是任意类型(var和Object类型也可以任意类型). 当然这里的参数类型你可以随意指定我这里已dynamic为例 * 参数 ...
- 强制位(set uid和set gid)与冒险位(sticky)的作用都有什么
1.set uid(强制位) 只能对文件进行设置 通过对文件设置uid可以使非文件拥有者或文件所属群组的用户具有执行该文件的权限. 例如ping,默认情况下所有用户都可以使用此命令,但当我们查看pin ...
- JS对象的引用,对象的拷贝
目录 一.场景 二.浅拷贝 三.深拷贝 一.场景 除了基本类型跟null,对象之间的赋值,只是将地址指向同一个,而不是真正意义上的拷贝 将一个对象赋值给另外一个对象. var a = [1,2,3]; ...
