修改管理员头像接口 - 后端实现
修改管理员头像接口 - 后端实现
该接口用于更新管理员头像,支持 GIF、PNG、JPG 格式。
// 1.修改头像
@PostMapping("/updateOneAdminByIdByFile")
public Result<Object> updateOneAdminByIdByFile(@RequestParam(value = "file", required = false) MultipartFile file,
@RequestParam(value = "adminId", required = false) Long adminId,
HttpServletRequest request) throws IOException {
// 权限验证
String token = (String) request.getAttribute("claims_admin");
if (token == null || "".equals(token)) {
log.info("token:" + token);
throw new RuntimeException("权限不足!");
}
// 先查询出需要修改的管理员对象
Admin admin = adminService.queryOneAdminByID(adminId);
if (admin == null) {
log.error("没查到当前用户!");
return new Result<>(ResultCode.FAIL);
}
// 删除本地上个头像
if (!StringUtils.isEmpty(admin.getAvatarUrl())) {
String picName = StringUtils.substringAfterLast(admin.getAvatarUrl(), "/");
log.info("删除头像:" + picName);
if (!"1.jpg".equals(picName)) {
String path1 = realPath + picName;
File file1 = new File(path1);// 根据指定的文件名创建File对象
if (!file1.exists()) {
log.info("文件" + path1 + "不存在,删除失败!");
} else if (file1.isFile()) {
log.info(file1.delete() ? "删除头像成功!" : "删除头像失败!");
}
}
}
// 上传新头像
if (file == null || file.isEmpty()) {
log.error("文件为空!");
return new Result<>(ResultCode.FAIL);
}
String fileName = file.getOriginalFilename();
String type = StringUtils.substringAfterLast(fileName, ".");
if (!StringUtils.equalsIgnoreCase("gif", type) && !StringUtils.equalsIgnoreCase("png", type) && !StringUtils.equalsIgnoreCase("jpg", type)) {
log.error("不是我们想要的文件类型,请按要求重新上传");
return new Result<>(ResultCode.FAIL);
}
// 自定义的文件名称
String pdNo = UUID.randomUUID().toString().replaceAll("-", "");
String trueFileName = pdNo + "-" + LocalDate.now() + ".jpg";
String path = realPath + trueFileName;
File dest = new File(path);
if (!dest.getParentFile().exists() && !dest.getParentFile().mkdir()) {
log.error("创建文件夹失败!");
return new Result<>(ResultCode.FAIL);
}
file.transferTo(dest);
// 更新管理员对象并保存
String avatarUrl = request.getScheme() + "//" + request.getServerName() + ":" + request.getServerPort() + "/download/" + trueFileName;
admin.setAvatarUrl(avatarUrl);
int ret = adminService.updateOneAdminByID(admin);
if (ret > 0) {
log.info("修改管理员成功!" + admin);
return new Result<>(ResultCode.SUCCESS);
} else {
log.error("修改管理员失败!");
return new Result<>(ResultCode.FAIL);
}
}
代码解析:
- 权限验证: 首先验证用户是否具有修改管理员头像的权限,通过检查请求头中的
token来判断。 - 查询管理员信息: 根据
adminId查询需要修改头像的管理员信息。 - 删除旧头像: 如果管理员存在且有旧头像,则删除旧头像文件。
- 文件类型校验: 上传新头像时,校验文件类型是否为 GIF、PNG 或 JPG 格式。
- 上传新头像: 生成新的文件名,将文件上传到服务器指定目录。
- 更新数据库: 将新头像路径更新到管理员信息中并保存到数据库。
注意事项:
- 文件大小限制: 需要设置上传文件大小限制,避免文件过大导致服务器崩溃。
- 文件存储路径: 文件存储路径需要配置,确保路径存在且可写。
- 安全性: 上传文件需要进行安全校验,避免恶意文件上传。
- 错误处理: 需要对代码中的异常进行处理,并返回错误信息给前端。
解决错误:org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException:
这个错误是文件大小超过了限制的错误。默认情况下,Tomcat的上传文件大小限制是1MB,您可以通过修改Tomcat的配置文件来增加文件大小限制。
在Tomcat的conf目录下找到server.xml文件,找到以下内容:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
在该段代码中添加以下配置:
maxSwallowSize="-1"
例如:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxSwallowSize="-1" />
然后重新启动Tomcat,上传文件大小限制就会被取消。注意,取消文件大小限制可能会导致服务器负载过大,因此请慎重使用。
原文地址: https://www.cveoy.top/t/topic/ql26 著作权归作者所有。请勿转载和采集!