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 @@
-
+