SpringBoot基础实战系列(三)springboot单文件与多文件上传
上一篇:SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter
springboot单文件上传
对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传。我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html。
1.创建controller
/**
* 单文件上传,使用post请求
* @param file
* @return
*/
@PostMapping("/upload")
@ResponseBody
public String fileupload(MultipartFile file){
// 获取文件的原文件名
String oldName = file.getOriginalFilename();
// 文件上传,保存为新的文件名
if (!"".equals(oldName) && oldName != null){
// 获取文件后缀
String suffixFileName = oldName.substring(oldName.lastIndexOf("."));
// 设置文件保存的文件夹
SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd");
String filePath = "C:/Users/Desktop/springboot" + sdf.format(new Date()) + "/" + UUID.randomUUID() + suffixFileName;
File dest = new File(filePath);
// 判断文件夹是否存在
if (!dest.exists()){
dest.mkdirs();
}
try {
// 文件写入
file.transferTo(dest);
// 返回文件保存成功之后的文件名路径
return filePath;
} catch (Exception e) {
e.printStackTrace();
}
}
return "文件上传失败";
}
2.创建upload.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>单文件上传</div>
<form method="post" enctype="multipart/form-data" action="/upload">
<input name="file" type="file" />
<input type="submit" value="提交" />
</form>
</body>
</html>
注意:
- 对于文件上传,我们一般使用
post方法 - 前端
html页面我暂时放在static文件夹下,由于浏览器页面是直接先访问到html页面的,而不是通过controller跳转得到的,所以该页面属于静态页面,而static文件夹下的资源文件属于静态资源文件都是可以直接访问的。这一点要区别于templates文件夹。 - 可能出现的报错:
template might not exist or might not be accessible by any of the configured Template Resolvers,可能原因是:需要在controller方法体上加上注解@ResponseBody或@RestController。
springboot多文件上传
多文件上传相比较于单文件上传,区别于单文件上传,多文件上传后端方法使用数组来接收 MultipartFile[] files,且多文件上传只是循环调用单文件上传的方法。
1.创建controller
/**
* 多文件上传(只是比单文件上传多了一个循环)
* @param files 文件集合
* @return
*/
@PostMapping("/uploads")
@ResponseBody
public String fileUploadMultipart(MultipartFile[] files, HttpServletRequest request){
// HttpSession session = request.getSession();
// System.out.println(session);
// ServletContext servletContext = session.getServletContext();
// System.out.println(servletContext);
// String context = servletContext.getRealPath("context");
// System.out.println(context);
List<String> list = new ArrayList<String>();
// 此处循环调用单文件的上传方法
for (int i = 0; i< files.length; i++){
String url = fileupload(files[i]);
list.add(url);
}
return list.toString();
}
2.创建upload.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>多文件上传</div>
<form method="post" enctype="multipart/form-data" action="/uploads">
<input name="files" type="file" multiple/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
希望自己能一直保持初衷,文章一直写下去,和大家一起成长
本系列代码github地址:https://github.com/shanggushenlong/springboot-demo
SpringBoot基础实战系列(三)springboot单文件与多文件上传的更多相关文章
- SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter
SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...
- SpringBoot基础实战系列(一)整合视图
SpringBoot整合freemarker 1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可 注:对于springboot项目的创建此处不 ...
- WCF开发实战系列三:自运行WCF服务
WCF开发实战系列三:自运行WCF服务 (原创:灰灰虫的家 http://hi.baidu.com/grayworm)上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把 ...
- java基础解析系列(三)---HashMap
java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
- django 基于form表单上传文件和基于ajax上传文件
一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...
- c# 模拟表单提交,post form 上传文件、大数据内容
表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...
- c# 模拟表单提交,post form 上传文件、数据内容
转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...
- PHP之文件的锁定、上传与下载
小结文件的锁定机制.上传和下载 1.文件锁定 现在都在讲究什么分布式.并发等,实际上文件的操作也是并发的,在网络环境下,多个用户在同一时刻访问页面,对同一服务器上的同一文件进行着读取,如果,这个用户刚 ...
- 求大师点化,寻求大文件(最大20G左右)上传方案
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- [YII2] 增删改查2
一.新增 使用model::save()操作进行新增数据 $user= new User; $user->username =$username; $user->password =$pa ...
- MySQL笔记总结-TCL语言
TCL语言 事务 一.含义 事务控制语言 Transaction Control Language 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行 二.特点(ACID ...
- HBase可用性分析与高可用实践
HBase作为一个分布式存储的数据库,它是如何保证可用性的呢?对于分布式系统的CAP问题,它是如何权衡的呢? 最重要的是,我们在生产实践中,又应该如何保证HBase服务的高可用呢? 下面我们来仔细分析 ...
- SESSION劫持
服务端和客户端之间是通过session(会话)来连接沟通.当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session.每个用户的session都是独立的,并且由服务器来维护.每个用户的s ...
- How to permit SSH root Login in Ubuntu 18.04
https://www.ubuntu18.com/ssh-permitrootlogin/ SSH root login is disabled by default in Ubuntu 18.04. ...
- Display a QMessageBox from a QThread
Emit a signal. Since you cannot do UI stuff in a Qthread, instead send your message as an argument o ...
- Linux下必知必会文件和目录
转载于:https://blog.51cto.com/xiyuxingxia/2372712
- SSH 超时设置
在阿里云买了一台乞丐版服务器,搭了一个博客,安装了java,mysql,redis等服务,把以前写的知乎爬虫部署上去,看看爬取效果.程序运行一段时间后,发现cmder上的日志不打了,我原以为爬虫挂了, ...
- CentOS配置Tomcat监听80端口,虚拟主机
2019独角兽企业重金招聘Python工程师标准>>> Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [ro ...
- Redis(三):多机数据库的实现
复制 在Redis中,用户可以通过SLAVEOF命令或是slaveof选项设置服务器的主从关系,从(SLAVE)服务器会复制主(Master)服务器. 旧版复制功能实现(2.8以前) 旧版复制功能主要 ...