mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-26 18:58:37 +08:00 
			
		
		
		
	refactor(system/file): 优化文件相关代码
This commit is contained in:
		| @@ -1,48 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. |  | ||||||
|  * |  | ||||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|  * you may not use this file except in compliance with the License. |  | ||||||
|  * You may obtain a copy of the License at |  | ||||||
|  * |  | ||||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  * |  | ||||||
|  * Unless required by applicable law or agreed to in writing, software |  | ||||||
|  * distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|  * See the License for the specific language governing permissions and |  | ||||||
|  * limitations under the License. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| package top.continew.admin.common.constant; |  | ||||||
|  |  | ||||||
| import top.continew.starter.core.constant.StringConstants; |  | ||||||
|  |  | ||||||
| import java.time.LocalDate; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * 系统文件相关常量 |  | ||||||
|  * |  | ||||||
|  * @author luoqiz |  | ||||||
|  * @since 2025/3/12 18:11 |  | ||||||
|  */ |  | ||||||
| public class SysFileConstants { |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 用户头像路径前缀 |  | ||||||
|      */ |  | ||||||
|     public static final String USER_AVATAR_PATH = "user/avatar/"; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 默认文件路径 |  | ||||||
|      */ |  | ||||||
|     public static String getDefaultFilePath() { |  | ||||||
|         LocalDate today = LocalDate.now(); |  | ||||||
|         String path = today.getYear() + StringConstants.SLASH + today.getMonthValue() + StringConstants.SLASH + today |  | ||||||
|             .getDayOfMonth() + StringConstants.SLASH; |  | ||||||
|         return path; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private SysFileConstants() { |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -14,7 +14,7 @@ | |||||||
|  * limitations under the License. |  * limitations under the License. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| package top.continew.admin.system.config.container; | package top.continew.admin.system.config.file; | ||||||
| 
 | 
 | ||||||
| import cn.crane4j.core.container.Container; | import cn.crane4j.core.container.Container; | ||||||
| import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||||
| @@ -29,19 +29,26 @@ import java.util.Map; | |||||||
| import java.util.function.Function; | import java.util.function.Function; | ||||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * 文件信息填充容器 | ||||||
|  |  * | ||||||
|  |  * @author luoqiz | ||||||
|  |  * @since 2025/3/12 18:11 | ||||||
|  |  */ | ||||||
| @Component | @Component | ||||||
| @RequiredArgsConstructor | @RequiredArgsConstructor | ||||||
| public class FileInfoContainer implements Container<Long> { | public class FileInfoContainer implements Container<Long> { | ||||||
| 
 | 
 | ||||||
|     private final FileService fileService; |     private final FileService fileService; | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|     public String getNamespace() { |     public String getNamespace() { | ||||||
|         return ContainerConstants.FILE_INFO; |         return ContainerConstants.FILE_INFO; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|     public Map<Long, FileDO> get(Collection<Long> ids) { |     public Map<Long, FileDO> get(Collection<Long> ids) { | ||||||
|         List<FileDO> list = fileService.listByIds(ids); |         List<FileDO> list = fileService.listByIds(ids); | ||||||
|         return list.stream().collect(Collectors.toMap(FileDO::getId, Function.identity())); |         return list.stream().collect(Collectors.toMap(FileDO::getId, Function.identity())); | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
| } | } | ||||||
| @@ -18,15 +18,16 @@ package top.continew.admin.system.service; | |||||||
|  |  | ||||||
| import org.dromara.x.file.storage.core.FileInfo; | import org.dromara.x.file.storage.core.FileInfo; | ||||||
| import org.springframework.web.multipart.MultipartFile; | import org.springframework.web.multipart.MultipartFile; | ||||||
| import top.continew.admin.common.constant.SysFileConstants; |  | ||||||
| import top.continew.admin.system.model.entity.FileDO; | import top.continew.admin.system.model.entity.FileDO; | ||||||
| import top.continew.admin.system.model.query.FileQuery; | import top.continew.admin.system.model.query.FileQuery; | ||||||
| import top.continew.admin.system.model.req.FileReq; | import top.continew.admin.system.model.req.FileReq; | ||||||
| import top.continew.admin.system.model.resp.file.FileResp; | import top.continew.admin.system.model.resp.file.FileResp; | ||||||
| import top.continew.admin.system.model.resp.file.FileStatisticsResp; | import top.continew.admin.system.model.resp.file.FileStatisticsResp; | ||||||
|  | import top.continew.starter.core.constant.StringConstants; | ||||||
| import top.continew.starter.data.mp.service.IService; | import top.continew.starter.data.mp.service.IService; | ||||||
| import top.continew.starter.extension.crud.service.BaseService; | import top.continew.starter.extension.crud.service.BaseService; | ||||||
|  |  | ||||||
|  | import java.time.LocalDate; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -44,13 +45,14 @@ public interface FileService extends BaseService<FileResp, FileResp, FileQuery, | |||||||
|      * @return 文件信息 |      * @return 文件信息 | ||||||
|      */ |      */ | ||||||
|     default FileInfo upload(MultipartFile file) { |     default FileInfo upload(MultipartFile file) { | ||||||
|         return upload(file, SysFileConstants.getDefaultFilePath(), null); |         return upload(file, getDefaultFilePath(), null); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 上传到默认存储 |      * 上传到默认存储 | ||||||
|      * |      * | ||||||
|      * @param file 文件信息 |      * @param file 文件信息 | ||||||
|  |      * @param path 文件路径 | ||||||
|      * @return 文件信息 |      * @return 文件信息 | ||||||
|      */ |      */ | ||||||
|     default FileInfo upload(MultipartFile file, String path) { |     default FileInfo upload(MultipartFile file, String path) { | ||||||
| @@ -81,4 +83,15 @@ public interface FileService extends BaseService<FileResp, FileResp, FileQuery, | |||||||
|      * @return 资源统计信息 |      * @return 资源统计信息 | ||||||
|      */ |      */ | ||||||
|     FileStatisticsResp statistics(); |     FileStatisticsResp statistics(); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取默认文件路径 | ||||||
|  |      * | ||||||
|  |      * @return 默认文件路径 | ||||||
|  |      */ | ||||||
|  |     default String getDefaultFilePath() { | ||||||
|  |         LocalDate today = LocalDate.now(); | ||||||
|  |         return today.getYear() + StringConstants.SLASH + today.getMonthValue() + StringConstants.SLASH + today | ||||||
|  |             .getDayOfMonth() + StringConstants.SLASH; | ||||||
|  |     } | ||||||
| } | } | ||||||
| @@ -57,7 +57,6 @@ import org.springframework.web.multipart.MultipartFile; | |||||||
| import top.continew.admin.auth.service.OnlineUserService; | import top.continew.admin.auth.service.OnlineUserService; | ||||||
| import top.continew.admin.common.constant.CacheConstants; | import top.continew.admin.common.constant.CacheConstants; | ||||||
| import top.continew.admin.common.constant.SysConstants; | import top.continew.admin.common.constant.SysConstants; | ||||||
| import top.continew.admin.common.constant.SysFileConstants; |  | ||||||
| import top.continew.admin.common.context.UserContext; | import top.continew.admin.common.context.UserContext; | ||||||
| import top.continew.admin.common.context.UserContextHolder; | import top.continew.admin.common.context.UserContextHolder; | ||||||
| import top.continew.admin.common.enums.DisEnableStatusEnum; | import top.continew.admin.common.enums.DisEnableStatusEnum; | ||||||
| @@ -122,6 +121,8 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes | |||||||
|     private DeptService deptService; |     private DeptService deptService; | ||||||
|     @Value("${avatar.support-suffix}") |     @Value("${avatar.support-suffix}") | ||||||
|     private String[] avatarSupportSuffix; |     private String[] avatarSupportSuffix; | ||||||
|  |     @Value("${avatar.path}") | ||||||
|  |     private String avatarPath; | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PageResp<UserResp> page(UserQuery query, PageQuery pageQuery) { |     public PageResp<UserResp> page(UserQuery query, PageQuery pageQuery) { | ||||||
| @@ -389,11 +390,18 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes | |||||||
|         String avatarImageType = FileNameUtil.extName(avatarFile.getOriginalFilename()); |         String avatarImageType = FileNameUtil.extName(avatarFile.getOriginalFilename()); | ||||||
|         CheckUtils.throwIf(!StrUtil.equalsAnyIgnoreCase(avatarImageType, avatarSupportSuffix), "头像仅支持 {} 格式的图片", String |         CheckUtils.throwIf(!StrUtil.equalsAnyIgnoreCase(avatarImageType, avatarSupportSuffix), "头像仅支持 {} 格式的图片", String | ||||||
|             .join(StringConstants.CHINESE_COMMA, avatarSupportSuffix)); |             .join(StringConstants.CHINESE_COMMA, avatarSupportSuffix)); | ||||||
|         FileInfo fileInfo = fileService.upload(avatarFile, SysFileConstants.USER_AVATAR_PATH); |         // 上传新头像 | ||||||
|         UserDO userInfo = getById(id); |         UserDO user = super.getById(id); | ||||||
|         fileStorageService.delete(userInfo.getAvatar()); |         FileInfo fileInfo = fileService.upload(avatarFile, avatarPath); | ||||||
|         baseMapper.lambdaUpdate().set(UserDO::getAvatar, fileInfo.getUrl()).eq(UserDO::getId, id).update(); |         // 更新用户头像 | ||||||
|         return fileInfo.getUrl(); |         String newAvatar = fileInfo.getUrl(); | ||||||
|  |         baseMapper.lambdaUpdate().set(UserDO::getAvatar, newAvatar).eq(UserDO::getId, id).update(); | ||||||
|  |         // 删除原头像 | ||||||
|  |         String oldAvatar = user.getAvatar(); | ||||||
|  |         if (StrUtil.isNotBlank(oldAvatar)) { | ||||||
|  |             fileStorageService.delete(oldAvatar); | ||||||
|  |         } | ||||||
|  |         return newAvatar; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -263,8 +263,11 @@ spring.servlet: | |||||||
|     max-file-size: 10MB |     max-file-size: 10MB | ||||||
|     # 单次总上传文件大小限制 |     # 单次总上传文件大小限制 | ||||||
|     max-request-size: 20MB |     max-request-size: 20MB | ||||||
| ## 头像支持格式配置 | ## 头像配置 | ||||||
| avatar: | avatar: | ||||||
|  |   # 存储路径 | ||||||
|  |   path: user/avatar/ | ||||||
|  |   # 支持的后缀 | ||||||
|   support-suffix: jpg,jpeg,png,gif |   support-suffix: jpg,jpeg,png,gif | ||||||
|  |  | ||||||
| --- ### Snail Job 配置 | --- ### Snail Job 配置 | ||||||
|   | |||||||
| @@ -260,8 +260,11 @@ spring.servlet: | |||||||
|     max-file-size: 10MB |     max-file-size: 10MB | ||||||
|     # 单次总上传文件大小限制 |     # 单次总上传文件大小限制 | ||||||
|     max-request-size: 20MB |     max-request-size: 20MB | ||||||
| ## 头像支持格式配置 | ## 头像配置 | ||||||
| avatar: | avatar: | ||||||
|  |   # 存储路径 | ||||||
|  |   path: user/avatar/ | ||||||
|  |   # 支持的后缀 | ||||||
|   support-suffix: jpg,jpeg,png,gif |   support-suffix: jpg,jpeg,png,gif | ||||||
|  |  | ||||||
| --- ### Snail Job 配置 | --- ### Snail Job 配置 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user