上一篇: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单文件与多文件上传的更多相关文章

  1. SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

    SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...

  2. SpringBoot基础实战系列(一)整合视图

    SpringBoot整合freemarker 1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可 注:对于springboot项目的创建此处不 ...

  3. WCF开发实战系列三:自运行WCF服务

    WCF开发实战系列三:自运行WCF服务 (原创:灰灰虫的家 http://hi.baidu.com/grayworm)上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把 ...

  4. java基础解析系列(三)---HashMap

    java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

  5. django 基于form表单上传文件和基于ajax上传文件

    一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...

  6. c# 模拟表单提交,post form 上传文件、大数据内容

    表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...

  7. c# 模拟表单提交,post form 上传文件、数据内容

    转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...

  8. PHP之文件的锁定、上传与下载

    小结文件的锁定机制.上传和下载 1.文件锁定 现在都在讲究什么分布式.并发等,实际上文件的操作也是并发的,在网络环境下,多个用户在同一时刻访问页面,对同一服务器上的同一文件进行着读取,如果,这个用户刚 ...

  9. 求大师点化,寻求大文件(最大20G左右)上传方案

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

随机推荐

  1. testlink的api

    testlink可以做很多你想象得到的事情,如API测试参数管理,Excel导入导出,快速模板创建测试用例,集成Jenkins. TestLink API第三方库: TestLink-API-Pyth ...

  2. 【考试总结】欢乐模拟赛_Day2

    \(T1\) 题目描述 在仙界中有着 \(n\) 位神仙, 每位神仙用一个 \(1 ∼ n\) 的特异编号表示, 老祖 \(ChitongZ\) 的编号为 \(1\) . 除去至尊至圣, 统管仙界的老 ...

  3. BI报表分析和数据可视化,推荐这三个开源工具!

    开源篇 一.Superset 1.技术架构:Python + Flask + React + Redux + SQLAlchemy 2.使用人群: (1)开发/分析人员做好看板,业务人员浏览看板数据 ...

  4. Android--sos闪光灯

    Camera camera = null; Parameters parameters = null; Handler handler = new Handler() { @Override publ ...

  5. thinkphp5--关于多条件查询的分页处理问题

    首先,我们要想搞明白,我们的分页参数起作用的原理: 正在使用的时候的语法: if(!empty($seach)){ $where['user_name|mobile'] = ['like','%'.$ ...

  6. Zabbix备份数据文件

    mysql自带的工具mysqldump,当数据量大了之后进行全备所花的时间比较长,这样将会造成数据库的锁读.从而zabbix服务的监控告警不断,想着做下配置文件的备份.刚好有这么个脚本.满足了需求. ...

  7. 关于CompletableFuture的一切,看这篇文章就够了

    文章目录 CompletableFuture作为Future使用 异步执行code 组合Futures thenApply() 和 thenCompose()的区别 并行执行任务 异常处理 java中 ...

  8. 学会HTML就可以找工作了

    对编程小白来讲,想要学习门槛低,学习周期短,难度指数可忽略.短时间内可能找一份薪资不错编程相关工作,那就把HTML作为入门级语言吧. 网页设计师 (//upload-images.jianshu.io ...

  9. inotifywait实现文件监控

    应用场景文件监控可以配合rsync实现文件自动同步,例如监听某个目录,当文件变化时,使用rsync命令将变化的文件同步.(可用于代码自动发布) 安装noitify下载地址:http://github. ...

  10. DeepWalk论文精读:(1)解决问题&相关工作

    模块1 1. 研究背景 随着互联网的发展,社交网络逐渐复杂化.多元化.在一个社交网络中,充斥着不同类型的用户,用户间产生各式各样的互动联系,形成大小不一的社群.为了对社交网络进行研究分析,需要将网络中 ...