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版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- API联调神器PostMan使用详解
简介 创建 + 测试:创建和发送任何的HTTP请求,请求可以保存到历史中再次执行 Organize:使用Postman Collections为更有效的测试及集成工作流管理和组织APIs docume ...
- 非oracle用户sysdba登陆出TNS-12547错误
这个问题mark下,测试机器oracle从12c升级到19c后,非oracle用户 sysdba登陆不上.sqlnet.log里错误是: sqplus uasa/uasa error Fa ...
- linux CVE-2019-13272 本地特权漏洞
漏洞描述 在5.1.17之前的Linux内核中,kernel / ptrace.c中的ptrace_link错误地处理了想要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来 ...
- pytorch seq2seq闲聊机器人加入attention机制
attention.py """ 实现attention """ import torch import torch.nn as nn im ...
- 关于Swiper和vue数据顺序加载问题处理
在使用swiper插件的时候,常常因为异步加载数据产生的顺序问题而使插件不能正常实行,所以可以使用vue的updated来解决. 问:什么时候 进updated方法? 答:只有事先设置好的data变量 ...
- 为给定字符串生成MD5指纹
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache ...
- C语言编程入门题目--No.10
题目:打印楼梯,同时在楼梯上方打印两个笑脸. 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数. 2.程序源代码: #include "stdio.h" ...
- 数学--数论--POJ1365——Prime Land
Description Everybody in the Prime Land is using a prime base number system. In this system, each po ...
- 数学--数论--HDU 12151七夕节
七夕节 Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!&q ...
- 【mybatis xml】数据层框架应用--Mybatis(三)关系映射之一对一关系映射
实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系. 针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关 ...