开始
service
CenterUserService
/**
* 用户头像更新
* @param userId
* @param faceUrl
* @return
*/
public Users updateFace(String userId,String faceUrl);
实现类
更新
@Transactional(propagation = Propagation.REQUIRED)
@Override
public Users updateFace(String userId, String faceUrl) {
Users updateUser=new Users();
updateUser.setId(userId);
updateUser.setFace(faceUrl);
updateUser.setUpdatedTime(new Date());
usersMapper.updateByPrimaryKeySelective(updateUser);
return queryUserInfo(userId);
}
controller
用户保存是在本地的地址
更新的地址 我们应该填写这个地址
前面可以当做图片的访问地址
配置文件增加配置
这是我本地的配置
file.imageServerUrl=http://localhost:8088/
配置类,然后生成getter和setter
private String imageServerUrl;
前端用户信息的覆盖,直接从下面的方法内,复制过来这段代码
前端浏览器可能会存在缓存,如果存在了缓存,图片可能就不能及时在前端更新
所以这里我们就加上时间戳
加上年月日,时分秒
最终代码
@ApiOperation(value = "修改用户信息",notes = "修改用户信息",httpMethod = "POST")
@PostMapping("uploadFace")
public IMOOCJSONResult uploadFace(
@ApiParam(name = "userId",value = "用户id",required = true)
@RequestParam(name = "userId") String userId
,@ApiParam(name = "file",value = "用户头像",required = true) MultipartFile file
, HttpServletRequest request, HttpServletResponse response
) {
// 定义头像保存的地址
// String fileSpace=IMAGE_USER_FACE_LOCATION;
String fileSpace=fileUpload.getImageUserFaceLocation();
//在路径上位每一个用户增加一个userId 用于区分不同用户上传
String uploadPathPrefix = File.separator+userId;
// 开始上传
if(file!=null){
FileOutputStream fileOutputStream=null;
try {
// 货的文件上传的文件名称
String fileName = file.getOriginalFilename();
if(StringUtils.isNotBlank(fileName)) {
// 保存文件的格式 face-{user-id}.png
String[] fileNameArr = fileName.split("\\.");
// 获得文件的后缀名
String suffix = fileNameArr[fileNameArr.length - 1];
// face-{user-id}.png
// 文件名称重组 覆盖式上传 增量式:自己额外拼接当前时间
String newFileName = "face-"+userId+"."+suffix;
// 上传的头像最终保存的位置
String finalFacePath = fileSpace+uploadPathPrefix+File.separator+newFileName;
// 用于提供给web服务器访问的地址
uploadPathPrefix+=("/"+newFileName);
File outFile=new File(finalFacePath);
if(outFile.getParentFile()!=null) {
// 创建文件夹
outFile.getParentFile().mkdir();
}
fileOutputStream = new FileOutputStream(outFile);
InputStream inputStream = file.getInputStream();
IOUtils.copy(inputStream,fileOutputStream);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fileOutputStream!=null) {
fileOutputStream.flush();
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
return IMOOCJSONResult.errorMsg("文件不能为空!");
}
// 获取图片服务器地址
String imageServerUrl = fileUpload.getImageServerUrl();
String finalUserFaceUrl=imageServerUrl+uploadPathPrefix+"?t="+ DateUtil.getCurrentDateString(DateUtil.DATE_PATTERN);
Users userResult = centerUserService.updateFace(userId, finalUserFaceUrl);
userResult=setNullProperty(userResult);
CookieUtils.setCookie(request,response,"user", JsonUtils.objectToJson(userResult),true);
return IMOOCJSONResult.ok();
}
测试
maven install。然后重启服务测试。