案例介绍:新用户注册,上传和下载头像
第一步:新建SpringBoot项目
新建项目,这里打包方式选Jar还是War都无所谓
这里加入以下依赖:
- Spring Web:我们是个Web项目当然要加入这个
- Lombok:加入Lombok是为了写实体类(和数据库一一对应的pojo类)时,可以不用自己写set和get方法
- Thymeleaf:是为了之后更方便进行前端页面的制作
- MyBatis:用Mybaits连接数据库
- MySql:使用Mysql数据库的驱动类
因为使用了Lombok,所以要在设置里开启注解处理器
导入跨服务器依赖
往项目里的pom.xml的dependencys标签里加入下面代码(加完之后记得加载Maven变更,idea快捷键ctrl+shift+o)
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.4</version>
</dependency>
第二步:新建数据库表
连接数据库的账号密码都是root,数据库名字叫novel,表名叫user
第三步:单独解压一个tomcat作为文件存储服务器
我新解压了一个tomcat,文件夹名字叫tomcat-9.0.64
打开到webapps文件夹,新建upload目录,等会文件往这里面存储。
然后找到conf目录下的server.xml文件
打开找到8005改为8006
连接器端口号从8080改为8090
接下来打开同级目录下的web.xml
加上配置信息,这样才可以写入
之后找到bin目录下的startup.bat,启动tomcat,查看能否启动,然后先不管。
可能启动tomcat它会一闪而过,这个问题是因为没有配置环境变量path。如果没这个问题可以跳到第三步。
在环境变量里一定要配置JAVA_HOME C:\Program Files\Java\jdk1.8.0_161(自己安装java的路径,每个人不一样)
部分电脑需要配置CATALINA_HOME D:///apache-tomcat-9.0.41(tomcat路径)
至于开始运行后控制台乱码控制台产生乱码的问题,是因为在Tomcat在输出日志中使用的是UTF-8编码,而我们中文的Windows操作系统使用的是GBK编码。由于编码格式不统一,所以出现了乱码。
解决方式:
修改conf目录中的logging.properties文件重新指定的编码方式。如果还是不行,那么 就删除该行即可
java.util.logging.ConsoleHandler.encoding = GBK
第四步:写具体逻辑
新建一个静态页面作为上传信息页面
前端注册页面详细代码,用来获取信息和上传头像
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<style>
.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>
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
$(function(){
$("#uploadFile").click(function(){
// 获取要上传的文件
var photoFile =$("#photo")[0].files[0]
if(photoFile==undefined){
alert("您还未选中文件")
return;
}
// 将文件装入FormData对象
var formData =new FormData();
formData.append("headPhoto",photoFile)
// ajax向后台发送文件
$.ajax({
//提交方式
type:"post",
//提交内容
data:formData,
//提交地址
url:"user/upload",
//将processData属性的值设置为false,告诉浏览器发送对象请求数据
processData:false,
//将contentType属性的值设置为false,设置请求数据的类型为二进制类型。
contentType:false,
success:function(result){
// 接收后台响应的信息
alert(result.message)
// 图片回显
$("#headImg").attr("src",result.newFileName);
//将文件类型和文件名放入form表单
$("#photoInput").val(result.newFileName);
$("#filetypeInput").val(result.filetype);
},
xhr: function() {
var xhr = new XMLHttpRequest();
//使用XMLHttpRequest.upload监听上传过程,注册progress事件,打印回调函数中的event事件
xhr.upload.addEventListener('progress', function (<