Commit 4e3357a1 by fengshuonan

优化上传头像

parent 5ece6a84
...@@ -16,30 +16,23 @@ ...@@ -16,30 +16,23 @@
package cn.stylefeng.guns.modular.system.controller; package cn.stylefeng.guns.modular.system.controller;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.stylefeng.guns.config.properties.GunsProperties; import cn.stylefeng.guns.config.properties.GunsProperties;
import cn.stylefeng.guns.core.common.constant.DefaultAvatar;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.core.shiro.ShiroKit; import cn.stylefeng.guns.core.shiro.ShiroKit;
import cn.stylefeng.guns.core.shiro.ShiroUser; import cn.stylefeng.guns.core.shiro.ShiroUser;
import cn.stylefeng.guns.modular.system.entity.FileInfo;
import cn.stylefeng.guns.modular.system.entity.Notice; import cn.stylefeng.guns.modular.system.entity.Notice;
import cn.stylefeng.guns.modular.system.entity.User; import cn.stylefeng.guns.modular.system.entity.User;
import cn.stylefeng.guns.modular.system.factory.UserFactory;
import cn.stylefeng.guns.modular.system.service.FileInfoService; import cn.stylefeng.guns.modular.system.service.FileInfoService;
import cn.stylefeng.guns.modular.system.service.NoticeService; import cn.stylefeng.guns.modular.system.service.NoticeService;
import cn.stylefeng.guns.modular.system.service.UserService; import cn.stylefeng.guns.modular.system.service.UserService;
import cn.stylefeng.roses.core.base.controller.BaseController; import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData; import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException; import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import cn.stylefeng.roses.kernel.model.exception.enums.CoreExceptionEnum; import cn.stylefeng.roses.kernel.model.exception.enums.CoreExceptionEnum;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
...@@ -48,14 +41,11 @@ import org.springframework.web.bind.annotation.*; ...@@ -48,14 +41,11 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 通用控制器 * 通用控制器
...@@ -232,34 +222,12 @@ public class SystemController extends BaseController { ...@@ -232,34 +222,12 @@ public class SystemController extends BaseController {
@ResponseBody @ResponseBody
public Object previewAvatar(HttpServletResponse response) { public Object previewAvatar(HttpServletResponse response) {
ShiroUser currentUser = ShiroKit.getUser();
if (currentUser == null) {
throw new ServiceException(CoreExceptionEnum.NO_CURRENT_USER);
}
//获取当前用户的头像id
User user = userService.getById(currentUser.getId());
String avatar = user.getAvatar();
//如果头像id为空就返回默认的
if (ToolUtil.isEmpty(avatar)) {
avatar = DefaultAvatar.BASE_64_AVATAR;
} else {
FileInfo fileInfo = fileInfoService.getById(avatar);
if (fileInfo == null) {
avatar = DefaultAvatar.BASE_64_AVATAR;
} else {
avatar = fileInfo.getFileData();
}
}
//输出图片的文件流 //输出图片的文件流
try { try {
response.setContentType("image/jpeg"); response.setContentType("image/jpeg");
byte[] decode = Base64.decode(avatar); byte[] decode = this.fileInfoService.previewAvatar();
response.getOutputStream().write(decode); response.getOutputStream().write(decode);
} catch (IOException e) { } catch (IOException e) {
log.error("获取图片的流错误!", avatar);
throw new ServiceException(CoreExceptionEnum.SERVICE_ERROR); throw new ServiceException(CoreExceptionEnum.SERVICE_ERROR);
} }
...@@ -281,15 +249,7 @@ public class SystemController extends BaseController { ...@@ -281,15 +249,7 @@ public class SystemController extends BaseController {
throw new ServiceException(CoreExceptionEnum.NO_CURRENT_USER); throw new ServiceException(CoreExceptionEnum.NO_CURRENT_USER);
} }
User user = userService.getById(currentUser.getId()); return new SuccessResponseData(userService.getUserInfo(currentUser.getId()));
Map<String, Object> map = UserFactory.removeUnSafeFields(user);
HashMap<Object, Object> hashMap = CollectionUtil.newHashMap();
hashMap.putAll(map);
hashMap.put("roleName", ConstantFactory.me().getRoleName(user.getRoleId()));
hashMap.put("deptName", ConstantFactory.me().getDeptName(user.getDeptId()));
return ResponseData.success(hashMap);
} }
/** /**
...@@ -300,30 +260,9 @@ public class SystemController extends BaseController { ...@@ -300,30 +260,9 @@ public class SystemController extends BaseController {
*/ */
@RequestMapping(method = RequestMethod.POST, path = "/upload") @RequestMapping(method = RequestMethod.POST, path = "/upload")
@ResponseBody @ResponseBody
public ResponseData layuiUpload(@RequestPart("file") MultipartFile picture) { public ResponseData layuiUpload(@RequestPart("file") MultipartFile file) {
String fileId = IdWorker.getIdStr(); String fileId = this.fileInfoService.uploadFile(file);
String pictureName = fileId + "." + ToolUtil.getFileSuffix(picture.getOriginalFilename());
try {
//保存文件到指定目录
String fileSavePath = gunsProperties.getFileUploadPath();
File file = new File(fileSavePath + pictureName);
picture.transferTo(file);
//获取文件的base64编码
byte[] bytes = IoUtil.readBytes(new FileInputStream(file));
String encode = Base64.encode(bytes);
//保存文件信息
FileInfo fileInfo = new FileInfo();
fileInfo.setFileId(fileId);
fileInfo.setFileData(encode);
fileInfoService.save(fileInfo);
} catch (Exception e) {
log.error("上传文件错误!", e);
throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
}
HashMap<String, Object> map = new HashMap<>(); HashMap<String, Object> map = new HashMap<>();
map.put("fileId", fileId); map.put("fileId", fileId);
......
...@@ -15,26 +15,24 @@ ...@@ -15,26 +15,24 @@
*/ */
package cn.stylefeng.guns.modular.system.controller; package cn.stylefeng.guns.modular.system.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.stylefeng.guns.config.properties.GunsProperties; import cn.stylefeng.guns.config.properties.GunsProperties;
import cn.stylefeng.guns.core.common.annotion.BussinessLog; import cn.stylefeng.guns.core.common.annotion.BussinessLog;
import cn.stylefeng.guns.core.common.annotion.Permission; import cn.stylefeng.guns.core.common.annotion.Permission;
import cn.stylefeng.guns.core.common.constant.Const; import cn.stylefeng.guns.core.common.constant.Const;
import cn.stylefeng.guns.core.common.constant.dictmap.UserDict; import cn.stylefeng.guns.core.common.constant.dictmap.UserDict;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.constant.state.ManagerStatus; import cn.stylefeng.guns.core.common.constant.state.ManagerStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory; import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.core.shiro.ShiroKit; import cn.stylefeng.guns.core.shiro.ShiroKit;
import cn.stylefeng.guns.modular.system.entity.User; import cn.stylefeng.guns.modular.system.entity.User;
import cn.stylefeng.guns.modular.system.factory.UserFactory;
import cn.stylefeng.guns.modular.system.model.UserDto; import cn.stylefeng.guns.modular.system.model.UserDto;
import cn.stylefeng.guns.modular.system.service.UserService; import cn.stylefeng.guns.modular.system.service.UserService;
import cn.stylefeng.guns.modular.system.warpper.UserWrapper; import cn.stylefeng.guns.modular.system.warpper.UserWrapper;
import cn.stylefeng.roses.core.base.controller.BaseController; import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.datascope.DataScope; import cn.stylefeng.roses.core.datascope.DataScope;
import cn.stylefeng.roses.core.reqres.response.ResponseData; import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException; import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
...@@ -48,7 +46,6 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -48,7 +46,6 @@ import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.File; import java.io.File;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
...@@ -133,23 +130,16 @@ public class UserMgrController extends BaseController { ...@@ -133,23 +130,16 @@ public class UserMgrController extends BaseController {
*/ */
@RequestMapping("/getUserInfo") @RequestMapping("/getUserInfo")
@ResponseBody @ResponseBody
public Object getUserInfo(@RequestParam Long userId) { public SuccessResponseData getUserInfo(@RequestParam Long userId) {
if (ToolUtil.isEmpty(userId)) { if (ToolUtil.isEmpty(userId)) {
throw new RequestEmptyException(); throw new RequestEmptyException();
} }
this.userService.assertAuth(userId); this.userService.assertAuth(userId);
User user = this.userService.getById(userId); return new SuccessResponseData(userService.getUserInfo(userId));
Map<String, Object> map = UserFactory.removeUnSafeFields(user);
HashMap<Object, Object> hashMap = CollectionUtil.newHashMap();
hashMap.putAll(map);
hashMap.put("roleName", ConstantFactory.me().getRoleName(user.getRoleId()));
hashMap.put("deptName", ConstantFactory.me().getDeptName(user.getDeptId()));
return ResponseData.success(hashMap);
} }
/** /**
* 修改当前用户的密码 * 修改当前用户的密码
* *
......
package cn.stylefeng.guns.modular.system.service; package cn.stylefeng.guns.modular.system.service;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.IoUtil;
import cn.stylefeng.guns.config.properties.GunsProperties;
import cn.stylefeng.guns.core.common.constant.DefaultAvatar;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.shiro.ShiroKit; import cn.stylefeng.guns.core.shiro.ShiroKit;
import cn.stylefeng.guns.core.shiro.ShiroUser; import cn.stylefeng.guns.core.shiro.ShiroUser;
import cn.stylefeng.guns.modular.system.entity.FileInfo; import cn.stylefeng.guns.modular.system.entity.FileInfo;
import cn.stylefeng.guns.modular.system.entity.User; import cn.stylefeng.guns.modular.system.entity.User;
import cn.stylefeng.guns.modular.system.mapper.FileInfoMapper; import cn.stylefeng.guns.modular.system.mapper.FileInfoMapper;
import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import cn.stylefeng.roses.kernel.model.exception.enums.CoreExceptionEnum; import cn.stylefeng.roses.kernel.model.exception.enums.CoreExceptionEnum;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/** /**
* <p> * <p>
...@@ -22,11 +35,15 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -22,11 +35,15 @@ import org.springframework.transaction.annotation.Transactional;
* @since 2018-12-07 * @since 2018-12-07
*/ */
@Service @Service
@Slf4j
public class FileInfoService extends ServiceImpl<FileInfoMapper, FileInfo> { public class FileInfoService extends ServiceImpl<FileInfoMapper, FileInfo> {
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired
private GunsProperties gunsProperties;
/** /**
* 更新头像 * 更新头像
* *
...@@ -46,4 +63,87 @@ public class FileInfoService extends ServiceImpl<FileInfoMapper, FileInfo> { ...@@ -46,4 +63,87 @@ public class FileInfoService extends ServiceImpl<FileInfoMapper, FileInfo> {
user.setAvatar(fileId); user.setAvatar(fileId);
userService.updateById(user); userService.updateById(user);
} }
/**
* 预览当前用户头像
*
* @author fengshuonan
* @Date 2019-05-04 17:04
*/
public byte[] previewAvatar() {
ShiroUser currentUser = ShiroKit.getUser();
if (currentUser == null) {
throw new ServiceException(CoreExceptionEnum.NO_CURRENT_USER);
}
//获取当前用户的头像id
User user = userService.getById(currentUser.getId());
String avatar = user.getAvatar();
//如果头像id为空就返回默认的
if (ToolUtil.isEmpty(avatar)) {
return Base64.decode(DefaultAvatar.BASE_64_AVATAR);
} else {
//文件id不为空就查询文件记录
FileInfo fileInfo = this.getById(avatar);
if (fileInfo == null) {
return Base64.decode(DefaultAvatar.BASE_64_AVATAR);
} else {
try {
String filePath = fileInfo.getFilePath();
return IoUtil.readBytes(new FileInputStream(filePath));
} catch (FileNotFoundException e) {
log.error("头像未找到!", e);
return Base64.decode(DefaultAvatar.BASE_64_AVATAR);
}
}
}
}
/**
* 上传文件
*
* @author fengshuonan
* @Date 2019-05-04 17:18
*/
public String uploadFile(MultipartFile file) {
//生成文件的唯一id
String fileId = IdWorker.getIdStr();
//获取文件后缀
String fileSuffix = ToolUtil.getFileSuffix(file.getOriginalFilename());
//获取文件原始名称
String originalFilename = file.getOriginalFilename();
//生成文件的最终名称
String finalName = fileId + "." + ToolUtil.getFileSuffix(originalFilename);
try {
//保存文件到指定目录
String fileSavePath = gunsProperties.getFileUploadPath();
File newFile = new File(fileSavePath + finalName);
file.transferTo(newFile);
//保存文件信息
FileInfo fileInfo = new FileInfo();
fileInfo.setFileId(fileId);
fileInfo.setFileName(originalFilename);
fileInfo.setFileSuffix(fileSuffix);
fileInfo.setFilePath(fileSavePath + finalName);
fileInfo.setFinalName(finalName);
fileInfo.setFileSizeKb(file.getSize());
this.save(fileInfo);
} catch (Exception e) {
log.error("上传文件错误!", e);
throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
}
return fileId;
}
} }
package cn.stylefeng.guns.modular.system.service; package cn.stylefeng.guns.modular.system.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.stylefeng.guns.core.common.constant.Const; import cn.stylefeng.guns.core.common.constant.Const;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.constant.state.ManagerStatus; import cn.stylefeng.guns.core.common.constant.state.ManagerStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.MenuNode; import cn.stylefeng.guns.core.common.node.MenuNode;
...@@ -22,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -22,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -216,4 +219,22 @@ public class UserService extends ServiceImpl<UserMapper, User> { ...@@ -216,4 +219,22 @@ public class UserService extends ServiceImpl<UserMapper, User> {
BeanUtil.copyProperties(shiroUser, lastUser); BeanUtil.copyProperties(shiroUser, lastUser);
} }
/**
* 获取用户的基本信息
*
* @author fengshuonan
* @Date 2019-05-04 17:12
*/
public Map<String, Object> getUserInfo(Long userId) {
User user = this.getById(userId);
Map<String, Object> map = UserFactory.removeUnSafeFields(user);
HashMap<Object, Object> hashMap = CollectionUtil.newHashMap();
hashMap.putAll(map);
hashMap.put("roleName", ConstantFactory.me().getRoleName(user.getRoleId()));
hashMap.put("deptName", ConstantFactory.me().getDeptName(user.getDeptId()));
return map;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment