前面已经使用过SpringMVC的文件上传,SpringBoot中文件上传和SpringMVC中基本一样,只是少了一些依赖导入
一、项目配置
1. 导入依赖
只需要导入文件服务器转存的依赖:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19</version>
</dependency>
2. 配置yml
和之前的springboot项目对比,只是修改了mybatis的包扫描路径
mybatis:
type-aliases-package: com.aruba.download.bean
spring:
datasource:
# 使用阿里的Druid连接池
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 填写你数据库的url、登录名、密码和数据库名
url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
druid:
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
# 配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置DruidStatViewServlet
stat-view-servlet:
url-pattern: "/druid/*"
# IP白名单(没有配置或者为空,则允许所有访问)
allow: 127.0.0.1,192.168.8.109
# IP黑名单 (存在共同时,deny优先于allow)
deny: 192.168.1.188
# 禁用HTML页面上的“Reset All”功能
reset-enable: false
# 登录名
login-username: admin
# 登录密码
login-password: 123456
二、复制代码和资源
接下来就是cv工作
1. Java代码的复制
SpringMVC中是利用的xml配置文件进行MapperScanner的配置,SpringBoot中不需要了,但要给Mapper层加上@Mapper注解:
@Mapper
public interface PlayerMapper {
/**
* 新增一个玩家
* @param player
* @return
*/
Integer addPlayer(Player player);
/**
* 获取所有玩家
* @return
*/
List<Player> findAllPlayers();
}
2. 资源文件的复制
SpringBoot中默认Mybatis的映射文件存放路径为resources目录下的mapper文件夹下。
再将registerPlayer.jsp改为registerPlayer.html,使用thymeleaf技术,除了删除jsp中的第一行代码,也没有改动:
<html>
<head>
<title>Title</title>
<script src="js/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$("#upload").click(function () {
var imgFile = $("#headImg")[0].files[0]
if (imgFile == undefined) {
alert("请选择文件")
return
}
console.log(imgFile)
var formdata = new FormData()
formdata.append("img", imgFile)
$.ajax({
type: "post",
data: formdata,
url: "uploadImg.do",
processData: false,
contentType: false,
success: function (ret) {
console.log(ret)
alert(ret.msg)
$("#head").attr("src", ret.filepath)
$("#filetypeInput").val(ret.filetype)
$("#photoInput").val(ret.filepath)
},
xhr: function () {
var xhr = new XMLHttpRequest();
//使用XMLHttpRequest.upload监听上传过程,注册progress事件,打印回调函数中的event事件
xhr.upload.addEventListener('progress', function (e) {
//loaded代表上传了多少
//total代表总数为多少
var progressRate = (e.loaded / e.total) * 100 + '%';
//通过设置进度条的宽度达到效果
$('.progress > div').css('width', progressRate );
})
return xhr;
}
})
})
})
</script>
<style>
#head {
width: 200px;
height: 200px;
}
.progress {
width: 200px;
height: 10px;
border: 1px solid #ccc;
border-radius: 10px;
margin: 10px 0px;
overflow: hidden;
}
/* 初始状态设置进度条宽度为0px */
.progress > div {
width: 0px;
height: 100%;
background-color: yellowgreen;
transition: all .3s ease;
}
</style>
</head>
<body>
<form action="registerPlayer.do">
<p>用户名:<input type="text" name="name"></p>
<p>密码:<input type="password" name="password"></p>
<p>昵称:<input type="text" name="nickname"></p>
<p>头像:<input id="headImg" type="file">
<input type="button" id="upload" value="上传文件">
</p>
<div class="progress">
<div></div>
</div>
<p><img id="head" alt="未选择图片"></p>
<input id="filetypeInput" type="hidden" name="filetype">
<input id="photoInput" type="hidden" name="photo">
<p><input type="submit" value="注册"></p>
</form>
</body>
</html>
3. Controller层新增跳转页面的处理单元
@RequestMapping("registerPlayer")
public String register() {
return "registerPlayer";
}
效果:
三、同步上传
之前实现的功能为文件的异步上传,即单独一个文件上传的接口。同步上传为一次性上传多个文件以及请求参数
1. 修改form表单
<form action="registerPlayer2.do" method="post" enctype="multipart/form-data">
<p>用户名:<input type="text" name="name"></p>
<p>密码:<input type="password" name="password"></p>
<p>昵称:<input type="text" name="nickname"></p>
<p>头像:<input id="headImg" name="photo1" type="file">
<input id="headImg2" name="photo2" type="file" multiple>
<div class="progress">
<div></div>
</div>
<p><img id="head" alt="未选择图片"></p>
<input id="filetypeInput" type="hidden" name="filetype">
<input id="photoInput" type="hidden" name="photo">
<p><input type="submit" value="注册"></p>
</form>
去除了上传图片的按钮,将图片与form表单一起提交
2. Controller层
使用MultipartFile接收参数:
@RequestMapping("registerPlayer2.do")
@ResponseBody
public String register2(Player player, @RequestParam("photo1") MultipartFile head, @RequestParam("photo2") MultipartFile[] photos) {
...
}
网友评论