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版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- window 下 jmeter+ant 自动生成html报告并发送邮件
一.安装ant 1.ant 下载地址:https://ant.apache.org/bindownload.cgi 2.下载完成解压到指定目录下 3.配置ant 环境变量 新建系统变量 -ANT_HO ...
- Jmeter工具 组件简单认识
JMETER 所有的组件(元素)都是基于测试计划的,先有测试计划然后才有 JMETER 组件 JMETER 核心组件1.JMETER中的 Threads 类似与线程数,每一个线程数代表一个虚拟用户:测 ...
- leetcode-0617 合并二叉树
题目地址https://leetcode-cn.com/problems/merge-two-binary-trees/ 1.递归解法 递归的话我们首先需要递归的终止条件,对于本题而言,递归的终止条件 ...
- APT32入侵我国,试图窃取COVID-19相关情报
新闻一篇: 一直以来,APT32都以东南亚为攻击目标,并且是近几年来针对中国大陆进行攻击活动最活跃的APT攻击组织,没有之一.此次再将目标对准中国,与新冠疫情离不开关系. 4月22日,Fireye发布 ...
- SpringBoot word 转换为 pdf
转换文件 swagger 地址, 基于 SpringBoot 开发 http://119.27.167.41:8888/convertor/swagger-ui.html 带有图片的word 转换体验 ...
- JDBC 工具类封装
每次使用jdbc 我们都要 加载驱动类 创建链接 创建Statement 接口对象执行sql 关闭资源 按照这样的套路可以封装一些重用代码方便在其他方法中调用 package com.xzlf.jdb ...
- Caused by: java.io.IOException: Type mismath in vlaue from map: excepted org.apache.hadoop.io.InaWritable,received SC
解决办法: 看map和reduce的输入是不是对应,看看map和reduce设置的参数和下面的是否一致
- PHP Callable强制指定回调类型的方法
如果一个方法需要接受一个回调方法作为参数,我们可以这样写 <?php function dosth($callback){ call_user_func($callback); } functi ...
- CC视频CTO栗伟:CDN系统架构及CC视频应用实践
2017 年 11 月9日,CC视频获2.08 亿元C轮融资. EGO 北京分会会员.CC视频CTO栗伟获邀作为 EGO 线上分享第三季嘉宾,与大家交流了CDN系统架构及CC 视频的应用实践. \\ ...
- Codeforces Round #460 (Div. 2)-A Supermaket(贪心)
A. Supermarket time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...