1、准备工作
1.1、工具类
@Component
public class FileUploadUtils {
@Autowired
CommonUtils commonUtils;
public String uploadAvatarFile(MultipartFile file,String customFileName) {
String path = "/usr/java/arcsoftAdministrationFolder/"+customFileName;
File filePath = new File(path);
System.out.println("文件的保存路径:" + path);
if (!filePath.exists() && !filePath.isDirectory()) {
System.out.println("目录不存在,创建目录:" + filePath);
filePath.mkdirs();
}
String originalFileName = file.getOriginalFilename();
String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
String fileName = commonUtils.getUUID() + "." + type;
File targetFile = new File(path, fileName);
try {
file.transferTo(targetFile);
return customFileName+fileName;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public boolean customDeleteFile(String fileName){
String path = "/usr/java/arcsoftAdministrationFolder/";
try {
File file = new File(path+fileName);
if (file.exists()){
file.delete();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
@Component
public class CommonUtils {
public String getUUID(){
String uuid = UUID.randomUUID().toString();
return uuid.replaceAll("-", "");
}
}
1.2、自定义WebMvcConfigurer
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/file/**").addResourceLocations("file:/usr/java/arcsoftAdministrationFolder/");
}
}
2、逻辑层
2.1、Service层实现类
@Service
public class FileUploadServiceImpl implements fileUploadService {
@Autowired
FileUploadUtils fileUploadUtils;
@Autowired
CommonUtils commonUtils;
@Autowired
UserMapper userMapper;
@Override
public JsonData updateUserProfile(MultipartFile file, User newUser) {
String headImage = fileUploadUtils.uploadAvatarFile(file, "headImage/");
fileUploadUtils.customDeleteFile(newUser.getHeadImage());
ShiroUtils.setUser(newUser);
newUser.setHeadImage(headImage);
userMapper.updateUserInfoById(newUser);
return JsonData.buildSuccess();
}
}
2.2、Controller层
@RestController
@RequestMapping("authc")
@CrossOrigin
@Transactional(rollbackFor = Exception.class)
public class FileUploadController {
@Autowired
fileUploadService fileUploadService;
@Autowired
UserService userService;
@PostMapping("/uploadHead")
public JsonData uploadHead(@RequestParam("file") MultipartFile file) {
User user = (User) SecurityUtils.getSubject().getPrincipal();
User allUserInfoByUsername = userService.findAllUserInfoByUsername(user.getUsername());
try {
return fileUploadService.updateUserProfile(file,allUserInfoByUsername);
} catch (Exception e) {
e.printStackTrace();
return JsonData.buildError("头像上传失败");
}
}
}
3、其他
3.1、Shiro的清除当前缓存并赋予新值
public class ShiroUtils {
public static Subject getSubjct() {
return SecurityUtils.getSubject();
}
public static User getUser() {
return (User) getSubjct().getPrincipal();
}
public static void setUser(User newUserInfo) {
Subject subject = SecurityUtils.getSubject();
PrincipalCollection principalCollection = subject.getPrincipals();
String realmName = principalCollection.getRealmNames().iterator().next();
PrincipalCollection newPrincipalCollection =
new SimplePrincipalCollection(newUserInfo, realmName);
subject.runAs(newPrincipalCollection);
}
}