Springboot实现⽂件(头像)上传
Springboot实现⽂件的上传
⾸先需要添加MultipartFile 这个类,这个类中提供了⼤量的关于上次⽂件的操作,其中执⾏上次的transferTo⽅法执⾏保存的⽅法。其中有:
/**
* MultipartFile相关API
* String getOriginalFileName(); 获取上传⽂件的原始⽂件名。
* boolean isEmpty(); 判断上传⽂件是否为空,当没有选择上传的⽂件或者上传的⽂件字节数位0的空⽂件时,返回true
* long getSize(); 获取⽂件的⼤⼩,以字节为单位
* String getContentType(); 根据上传的⽂件拓展名决定该⽂件的MIME类型,如:.jpg,将返回image/jpeg
* InputStream getInputStream();获取读取上传⽂件的输⼊字节流,通常⽤于⾃定义读取所上传⽂件的过
程,该⽅法与transferTo()⽅法不可同时使⽤。
* void transferTo(File dest); 保存上传⽂件,该⽅法不能与getInputStream()同⽤。
*/
注意:
springboot强制要求,⽤户上传的⽂件⼤⼩为1M. 由于springboot有内置的服务器,所以上传的⽂件应该是在wtpwebapps⽂件下是可以到的!当再次跑动项⽬后应该是不存了;为了保存下⽤户每次上次的数据,那么,我们就需要在服务端指定⼀个⽤户上传到服务的⽂件的存放位置(就是个⽂件夹),⽽这个⽂件的创建是在webapp下完成的。所以确定⽂件是否上传成功,就可以在webapp⽂件夹下指定的⽂件夹⾥(我指定的⽂件夹是upload),还有⼀种⽅式就是通过数据库查询指定字段来确定是否上传成功。
--- 此项⽬没有对上传的⽂件类型和⼤⼩做任何的限制。需要做限制操作可以转看我撰写的:SpringMVC实现⽂件上传⽂章。
==============⼤致实现代码如下===============
Controller层的⽂件上传实现代码:
@RequestMapping("update_avatar")
public JsonResult<String> uploadAvatar(@RequestParam(value = "file")MultipartFile file,
HttpServletRequest request) throws IllegalStateException, IOException{
//1.确定保存的⽂件夹
String dirPath = ServletContext().getRealPath("upload");//会在webapp下⾯创建此⽂件夹
System.out.println("dirPath="+dirPath);
File dir = new File(dirPath);
if(!ists()) {
dir.mkdirs();
}
//2.确定保存的⽂件名
String orginalFilename = OriginalFilename();
int beginIndex = orginalFilename.lastIndexOf(".");
String suffix ="";
if(beginIndex!=-1) {
suffix = orginalFilename.substring(beginIndex);
}
String filename =UUID.randomUUID().toString()+suffix;
//创建⽂件对象,表⽰要保存的头像⽂件,第⼀个参数表⽰存储的⽂件夹,第⼆个参数表⽰存储的⽂件
File dest = new File(dir,filename);
//执⾏保存
/
/更新数据表
String avatar = "/upload/"+filename;
Integer uid = Integer.Session().getAttribute("uid").toString());
// 通过uid到⽤户
User results = ByUid(uid);
userService.Uid(), avatar);
JsonResult<String> jr = new JsonResult<>();
jr.setState(OK);
jr.setData(avatar);
return jr;
}
Service层实现代码:
/**
* 更新⽤户头像
* @param uid ⽤户id
* @param avatar ⽤户头像
* @throws UpdateException 更新时发⽣异常
* @throws UserNotFoundException ⽤户不到异常
*/
@Override
public void changeAvatar(Integer uid, String avatar) {
//通过uid查询此⽤户是否存在
User results = userMapper.findByUid(uid);
if(results == null ){
throw new UserNotFoundException("头像更新失败!没有到该⽤户。");
}
if( IsDelete().equals(1)){
throw new UserNotFoundException("头像更新失败!没有到该⽤户。");
}
springboot其实就是springString modifiedUser = Username();
Date modifiedTime = new Date();
Integer rows = difiedAvatarById(uid, avatar, modifiedUser, modifiedTime);
if(rows != 1) {
throw new UpdateException("头像更新失败!更新时发送未知错误。");
}
}
Dao层的接⼝Java代码:
/**
* 修改头像
* @param uid ⽤户id
* @param avatar ⽤户头像
* @param modifiedUser 修改头像的⽤户
* @param modifiedTime 修改头像的时间
* @return受影响的⾏数
*/
Integer modifiedAvatarById(
@Param("uid")Integer uid,
@Param("avatar")String avatar,
@Param("modifiedUser")String modifiedUser,
@Param("modifiedTime")Date modifiedTime);
Mapper映射的sql语句:
<update id="modifiedAvatarById">
update t_user
set avatar =#{avatar},modified_user =#{modifiedUser},modified_time =#{modifiedTime} where uid = #{uid}
</update>
前端htnl页⾯部分代码:
<!--上传头像表单开始-->
<form id="form-upload" class="form-horizontal" role="form">
<div class="form-group">
<label class="col-md-2 control-label">选择头像:</label>
<div class="col-md-1">
<img src="../images/index/user.jpg" class="img-responsive"/>
</div>
<div class="clearfix"></div>
<div class="col-md-offset-2 col-md-4">
<input name="file" type="file">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input id="form-btn" type="button" class="btn btn-primary" value="上传"/> </div>
</div>
</form>
Ajax部分的代码:
<script type="text/javascript">
$("#form-btn").click(function() {
$.ajax({
"url":"/users/update_avatar",
"data":new FormData($("#form-upload")[0]),
"processData":false,
"contentType":false,
"type":"POST",
"dataType":"json",
"success":function(json) {
if (json.state == 100) {
alert("修改成功!");
//$("#img-avatar").attr("src", json.data);
} else {
alert("修改失败!" + ssage + "!");
}
},
"error":function(xhr) {
alert("您的登录信息已经过期,请重新登录!\n\nHTTP响应码:" + xhr.status);
// location.href = "login.html";
}
});
});
</script>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论