From 5e370254dd00deaab62438c5feb4de14192ad7e6 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Fri, 29 Dec 2023 21:44:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E5=8E=9F?= =?UTF-8?q?=E6=9C=89=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除 ContiNew Starter 本地存储依赖 --- continew-admin-common/pom.xml | 8 +- .../admin/system/config/FileRecorderImpl.java | 39 +++++- .../config/FileStorageConfigLoader.java | 2 +- .../admin/system/service/FileService.java | 9 +- .../system/service/impl/FileServiceImpl.java | 18 ++- .../service/impl/StorageServiceImpl.java | 2 +- .../system/service/impl/UserServiceImpl.java | 31 ++--- .../src/components/navbar/index.vue | 3 +- continew-admin-ui/src/utils/avatar.ts | 8 -- continew-admin-ui/src/views/login/index.vue | 5 +- .../config/components/basic-setting.vue | 5 +- .../webapi/common/CaptchaController.java | 4 + .../admin/webapi/common/CommonController.java | 20 +-- .../main/resources/config/application-dev.yml | 111 +++++++--------- .../resources/config/application-prod.yml | 121 ++++++++---------- .../src/main/resources/config/application.yml | 24 ++-- .../changelog/v2.2.0/continew-admin_data.sql | 4 +- docker/docker-compose.yml | 1 - 18 files changed, 193 insertions(+), 222 deletions(-) diff --git a/continew-admin-common/pom.xml b/continew-admin-common/pom.xml index 07ccca22..c9fd979d 100644 --- a/continew-admin-common/pom.xml +++ b/continew-admin-common/pom.xml @@ -64,12 +64,6 @@ continew-starter-file-excel - - - top.charles7c.continew - continew-starter-storage-local - - top.charles7c.continew @@ -93,7 +87,7 @@ org.dromara.x-file-storage x-file-storage-spring - + com.amazonaws aws-java-sdk-s3 diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileRecorderImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileRecorderImpl.java index fddcbca1..493eef71 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileRecorderImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileRecorderImpl.java @@ -16,6 +16,8 @@ package top.charles7c.continew.admin.system.config; +import java.util.Optional; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -25,6 +27,7 @@ import org.springframework.stereotype.Component; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.EscapeUtil; +import cn.hutool.core.util.StrUtil; import top.charles7c.continew.admin.common.util.helper.LoginHelper; import top.charles7c.continew.admin.system.enums.FileTypeEnum; @@ -32,6 +35,7 @@ import top.charles7c.continew.admin.system.mapper.FileMapper; import top.charles7c.continew.admin.system.mapper.StorageMapper; import top.charles7c.continew.admin.system.model.entity.FileDO; import top.charles7c.continew.admin.system.model.entity.StorageDO; +import top.charles7c.continew.starter.core.constant.StringConstants; /** * 文件记录实现类 @@ -50,7 +54,9 @@ public class FileRecorderImpl implements FileRecorder { @Override public boolean save(FileInfo fileInfo) { FileDO file = new FileDO(); - file.setName(EscapeUtil.unescape(fileInfo.getOriginalFilename())); + String originalFilename = EscapeUtil.unescape(fileInfo.getOriginalFilename()); + file.setName(StrUtil.contains(originalFilename, StringConstants.DOT) + ? StrUtil.subBefore(originalFilename, StringConstants.DOT, true) : originalFilename); file.setSize(fileInfo.getSize()); file.setUrl(fileInfo.getUrl()); file.setExtension(fileInfo.getExt()); @@ -66,17 +72,40 @@ public class FileRecorderImpl implements FileRecorder { @Override public FileInfo getByUrl(String url) { - FileDO file = fileMapper.lambdaQuery().eq(FileDO::getUrl, url).one(); + FileDO file = this.getFileByUrl(url); + if (null == file) { + return null; + } FileInfo fileInfo = new FileInfo(); - fileInfo.setOriginalFilename(file.getName()); + String extension = file.getExtension(); + fileInfo.setOriginalFilename( + StrUtil.isNotBlank(extension) ? file.getName() + StringConstants.DOT + extension : file.getName()); fileInfo.setSize(file.getSize()); fileInfo.setUrl(file.getUrl()); - fileInfo.setExt(file.getExtension()); + fileInfo.setExt(extension); + fileInfo.setBasePath(StringConstants.EMPTY); + fileInfo.setPath(StringConstants.EMPTY); + fileInfo.setFilename(StrUtil.subAfter(url, StringConstants.SLASH, true)); + fileInfo.setPlatform(storageMapper.lambdaQuery().eq(StorageDO::getId, file.getStorageId()).one().getCode()); return fileInfo; } @Override public boolean delete(String url) { - return fileMapper.lambdaUpdate().eq(FileDO::getUrl, url).remove(); + FileDO file = this.getFileByUrl(url); + return fileMapper.lambdaUpdate().eq(FileDO::getUrl, file.getUrl()).remove(); + } + + /** + * 根据 URL 查询文件 + * + * @param url + * URL + * @return 文件信息 + */ + private FileDO getFileByUrl(String url) { + Optional fileOptional = fileMapper.lambdaQuery().eq(FileDO::getUrl, url).oneOpt(); + return fileOptional.orElseGet(() -> fileMapper.lambdaQuery() + .eq(FileDO::getUrl, StrUtil.subAfter(url, StringConstants.SLASH, true)).oneOpt().orElse(null)); } } \ No newline at end of file diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileStorageConfigLoader.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileStorageConfigLoader.java index 955f8c70..a7838015 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileStorageConfigLoader.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/config/FileStorageConfigLoader.java @@ -41,7 +41,7 @@ import top.charles7c.continew.admin.system.service.StorageService; * @since 2023/12/24 22:31 */ @Slf4j -//@Component +@Component @RequiredArgsConstructor public class FileStorageConfigLoader implements ApplicationRunner { diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/FileService.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/FileService.java index 6debb373..1ba919ec 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/FileService.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/FileService.java @@ -18,6 +18,7 @@ package top.charles7c.continew.admin.system.service; import java.util.List; +import org.dromara.x.file.storage.core.FileInfo; import org.springframework.web.multipart.MultipartFile; import top.charles7c.continew.admin.system.model.query.FileQuery; @@ -39,9 +40,10 @@ public interface FileService extends BaseService entry : registerMapping.entrySet()) { - String pathPattern = StrUtil.appendIfMissing(entry.getKey(), "/**"); + String pathPattern = StrUtil.appendIfMissing(entry.getKey(), StringConstants.PATH_PATTERN); String resourceLocations = StrUtil.appendIfMissing(entry.getValue(), StringConstants.SLASH); // 移除之前注册过的相同 Pattern 映射 handlerMap.remove(pathPattern); diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java index 9bdf426a..2f3c71b4 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java @@ -16,7 +16,6 @@ package top.charles7c.continew.admin.system.service.impl; -import java.io.File; import java.time.LocalDateTime; import java.util.*; @@ -24,15 +23,15 @@ import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; +import org.dromara.x.file.storage.core.FileInfo; +import org.dromara.x.file.storage.core.FileStorageService; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.unit.DataSize; import org.springframework.web.multipart.MultipartFile; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -51,17 +50,12 @@ import top.charles7c.continew.admin.system.model.req.UserReq; import top.charles7c.continew.admin.system.model.req.UserRoleUpdateReq; import top.charles7c.continew.admin.system.model.resp.UserDetailResp; import top.charles7c.continew.admin.system.model.resp.UserResp; -import top.charles7c.continew.admin.system.service.DeptService; -import top.charles7c.continew.admin.system.service.RoleService; -import top.charles7c.continew.admin.system.service.UserRoleService; -import top.charles7c.continew.admin.system.service.UserService; +import top.charles7c.continew.admin.system.service.*; import top.charles7c.continew.starter.core.constant.StringConstants; import top.charles7c.continew.starter.core.util.ExceptionUtils; -import top.charles7c.continew.starter.core.util.FileUploadUtils; import top.charles7c.continew.starter.core.util.validate.CheckUtils; import top.charles7c.continew.starter.extension.crud.base.BaseServiceImpl; import top.charles7c.continew.starter.extension.crud.base.CommonUserService; -import top.charles7c.continew.starter.storage.local.autoconfigure.LocalStorageProperties; /** * 用户业务实现 @@ -75,11 +69,12 @@ import top.charles7c.continew.starter.storage.local.autoconfigure.LocalStoragePr public class UserServiceImpl extends BaseServiceImpl implements UserService, CommonUserService { - private final UserRoleService userRoleService; - private final RoleService roleService; - private final LocalStorageProperties localStorageProperties; @Resource private DeptService deptService; + private final RoleService roleService; + private final UserRoleService userRoleService; + private final FileService fileService; + private final FileStorageService fileStorageService; @Override public Long add(UserDO user) { @@ -164,26 +159,20 @@ public class UserServiceImpl extends BaseServiceImpl maxFileSize.toBytes(), "请上传小于 {}MB 的图片", maxFileSize.toMegabytes()); String avatarImageType = FileNameUtil.extName(avatarFile.getOriginalFilename()); String[] avatarSupportImgTypes = FileConstants.AVATAR_SUPPORTED_IMG_TYPES; CheckUtils.throwIf(!StrUtil.equalsAnyIgnoreCase(avatarImageType, avatarSupportImgTypes), "头像仅支持 {} 格式的图片", String.join(StringConstants.CHINESE_COMMA, avatarSupportImgTypes)); // 上传新头像 UserDO user = super.getById(id); - String avatarPath = storageMapping.getLocation(); - File newAvatarFile = FileUploadUtils.upload(avatarFile, avatarPath, false); - CheckUtils.throwIfNull(newAvatarFile, "上传头像失败"); - assert null != newAvatarFile; + FileInfo fileInfo = fileService.upload(avatarFile); // 更新用户头像 - String newAvatar = newAvatarFile.getName(); + String newAvatar = fileInfo.getUrl(); baseMapper.lambdaUpdate().set(UserDO::getAvatar, newAvatar).eq(UserDO::getId, id).update(); // 删除原头像 String oldAvatar = user.getAvatar(); if (StrUtil.isNotBlank(oldAvatar)) { - FileUtil.del(avatarPath + oldAvatar); + fileStorageService.delete(oldAvatar); } return newAvatar; } diff --git a/continew-admin-ui/src/components/navbar/index.vue b/continew-admin-ui/src/components/navbar/index.vue index 945aa3fa..920ad8de 100644 --- a/continew-admin-ui/src/components/navbar/index.vue +++ b/continew-admin-ui/src/components/navbar/index.vue @@ -2,7 +2,7 @@