Skip to content

Commit bcbb4ac

Browse files
committed
用户头像更换后移除旧头像文件
1 parent 4c74687 commit bcbb4ac

8 files changed

Lines changed: 91 additions & 11 deletions

File tree

ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.springframework.web.multipart.MultipartFile;
1717
import com.ruoyi.common.config.RuoYiConfig;
1818
import com.ruoyi.common.config.ServerConfig;
19-
import com.ruoyi.common.constant.Constants;
2019
import com.ruoyi.common.core.domain.AjaxResult;
2120
import com.ruoyi.common.utils.StringUtils;
2221
import com.ruoyi.common.utils.file.FileUploadUtils;
@@ -150,7 +149,7 @@ public void resourceDownload(String resource, HttpServletRequest request, HttpSe
150149
// 本地资源路径
151150
String localPath = RuoYiConfig.getProfile();
152151
// 数据库资源地址
153-
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
152+
String downloadPath = localPath + FileUtils.stripPrefix(resource);
154153
// 下载名称
155154
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
156155
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);

ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.ruoyi.common.utils.ShiroUtils;
2222
import com.ruoyi.common.utils.StringUtils;
2323
import com.ruoyi.common.utils.file.FileUploadUtils;
24+
import com.ruoyi.common.utils.file.FileUtils;
2425
import com.ruoyi.common.utils.file.MimeTypeUtils;
2526
import com.ruoyi.framework.shiro.service.SysPasswordService;
2627
import com.ruoyi.system.service.ISysUserService;
@@ -162,11 +163,16 @@ public AjaxResult updateAvatar(@RequestParam("avatarfile") MultipartFile file)
162163
{
163164
if (!file.isEmpty())
164165
{
165-
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
166-
currentUser.setAvatar(avatar);
167-
if (userService.updateUserInfo(currentUser) > 0)
166+
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION, true);
167+
if (userService.updateUserAvatar(currentUser.getUserId(), avatar))
168168
{
169-
setSysUser(userService.selectUserById(currentUser.getUserId()));
169+
String oldAvatar = currentUser.getAvatar();
170+
if (StringUtils.isNotEmpty(oldAvatar))
171+
{
172+
FileUtils.deleteFile(RuoYiConfig.getProfile() + FileUtils.stripPrefix(oldAvatar));
173+
}
174+
currentUser.setAvatar(avatar);
175+
setSysUser(currentUser);
170176
return success();
171177
}
172178
}

ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.ruoyi.common.exception.file.InvalidExtensionException;
1414
import com.ruoyi.common.utils.DateUtils;
1515
import com.ruoyi.common.utils.StringUtils;
16+
import com.ruoyi.common.utils.uuid.IdUtils;
1617
import com.ruoyi.common.utils.uuid.Seq;
1718

1819
/**
@@ -101,6 +102,26 @@ public static final String upload(String baseDir, MultipartFile file) throws IOE
101102
public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
102103
throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
103104
InvalidExtensionException
105+
{
106+
return upload(baseDir, file, allowedExtension, false);
107+
}
108+
109+
/**
110+
* 文件上传
111+
*
112+
* @param baseDir 相对应用的基目录
113+
* @param file 上传的文件
114+
* @param useCustomNaming 系统自定义文件名
115+
* @param allowedExtension 上传文件类型
116+
* @return 返回上传成功的文件名
117+
* @throws FileSizeLimitExceededException 如果超出最大大小
118+
* @throws FileNameLengthLimitExceededException 文件名太长
119+
* @throws IOException 比如读写文件出错时
120+
* @throws InvalidExtensionException 文件校验异常
121+
*/
122+
public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension, boolean useCustomNaming)
123+
throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
124+
InvalidExtensionException
104125
{
105126
int fileNameLength = Objects.requireNonNull(file.getOriginalFilename()).length();
106127
if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
@@ -110,20 +131,27 @@ public static final String upload(String baseDir, MultipartFile file, String[] a
110131

111132
assertAllowed(file, allowedExtension);
112133

113-
String fileName = extractFilename(file);
134+
String fileName = useCustomNaming ? uuidFilename(file) : extractFilename(file);
114135

115136
String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
116137
file.transferTo(Paths.get(absPath));
117138
return getPathFileName(baseDir, fileName);
118139
}
119140

120141
/**
121-
* 编码文件名
142+
* 编码文件名(日期格式目录 + 原文件名 + 序列值 + 后缀)
122143
*/
123144
public static final String extractFilename(MultipartFile file)
124145
{
125-
return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
126-
FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file));
146+
return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file));
147+
}
148+
149+
/**
150+
* 编编码文件名(日期格式目录 + UUID + 后缀)
151+
*/
152+
public static final String uuidFilename(MultipartFile file)
153+
{
154+
return StringUtils.format("{}/{}.{}", DateUtils.datePath(), IdUtils.fastSimpleUUID(), getExtension(file));
127155
}
128156

129157
public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException
@@ -193,6 +221,7 @@ else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION)
193221
throw new InvalidExtensionException(allowedExtension, extension, fileName);
194222
}
195223
}
224+
196225
}
197226

198227
/**

ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.apache.commons.io.IOUtils;
1616
import org.apache.commons.lang3.ArrayUtils;
1717
import com.ruoyi.common.config.RuoYiConfig;
18+
import com.ruoyi.common.constant.Constants;
1819
import com.ruoyi.common.utils.DateUtils;
1920
import com.ruoyi.common.utils.StringUtils;
2021
import com.ruoyi.common.utils.uuid.IdUtils;
@@ -103,6 +104,17 @@ public static String writeBytes(byte[] data, String uploadDir) throws IOExceptio
103104
return FileUploadUtils.getPathFileName(uploadDir, pathName);
104105
}
105106

107+
/**
108+
* 移除路径中的请求前缀片段
109+
*
110+
* @param filePath 文件路径
111+
* @return 移除后的文件路径
112+
*/
113+
public static String stripPrefix(String filePath)
114+
{
115+
return StringUtils.substringAfter(filePath, Constants.RESOURCE_PREFIX);
116+
}
117+
106118
/**
107119
* 删除文件
108120
*
@@ -288,4 +300,3 @@ public static String getNameNotSuffix(String fileName)
288300
return baseName;
289301
}
290302
}
291-

ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ruoyi.system.mapper;
22

33
import java.util.List;
4+
import org.apache.ibatis.annotations.Param;
45
import com.ruoyi.common.core.domain.entity.SysUser;
56

67
/**
@@ -90,6 +91,15 @@ public interface SysUserMapper
9091
*/
9192
public int updateUser(SysUser user);
9293

94+
/**
95+
* 修改用户头像
96+
*
97+
* @param userId 用户ID
98+
* @param avatar 头像地址
99+
* @return 结果
100+
*/
101+
public int updateUserAvatar(@Param("userId") Long userId, @Param("avatar") String avatar);
102+
93103
/**
94104
* 新增用户信息
95105
*

ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,15 @@ public interface ISysUserService
124124
*/
125125
public int updateUserInfo(SysUser user);
126126

127+
/**
128+
* 修改用户头像
129+
*
130+
* @param userId 用户ID
131+
* @param avatar 头像地址
132+
* @return 结果
133+
*/
134+
public boolean updateUserAvatar(Long userId, String avatar);
135+
127136
/**
128137
* 用户授权角色
129138
*

ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,18 @@ public int updateUserInfo(SysUser user)
275275
return userMapper.updateUser(user);
276276
}
277277

278+
/**
279+
* 修改用户头像
280+
*
281+
* @param userId 用户ID
282+
* @param avatar 头像地址
283+
* @return 结果
284+
*/
285+
public boolean updateUserAvatar(Long userId, String avatar)
286+
{
287+
return userMapper.updateUserAvatar(userId, avatar) > 0;
288+
}
289+
278290
/**
279291
* 用户授权角色
280292
*

ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
166166
</foreach>
167167
</delete>
168168

169+
<update id="updateUserAvatar" parameterType="SysUser">
170+
update sys_user set avatar = #{avatar} where user_id = #{userId}
171+
</update>
172+
169173
<update id="updateUser" parameterType="SysUser">
170174
update sys_user
171175
<set>

0 commit comments

Comments
 (0)