Browse Source

文件表建加原文件名称字段original_name,相关代码修改

谢华宁 2 years ago
parent
commit
0fd5de2d73
16 changed files with 40 additions and 43 deletions
  1. 2 14
      yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java
  2. 2 2
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java
  3. 3 5
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java
  4. 3 0
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileRespVO.java
  5. 4 0
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java
  6. 2 2
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java
  7. 4 5
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
  8. 2 2
      yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java
  9. 1 1
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java
  10. 2 1
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java
  11. 2 2
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java
  12. 3 2
      yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java
  13. 3 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java
  14. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
  15. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
  16. 3 2
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java

+ 2 - 14
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java

@@ -1,7 +1,5 @@
 package cn.iocoder.yudao.module.infra.api.file;
 
-import cn.hutool.core.util.IdUtil;
-
 /**
  * 文件 API 接口
  *
@@ -12,20 +10,10 @@ public interface FileApi {
     /**
      * 保存文件,并返回文件的访问路径
      *
+     * @param originalName 原文件名称
      * @param content 文件内容
      * @return 文件路径
      */
-   default String createFile(byte[] content) throws Exception {
-       return createFile(IdUtil.fastUUID(), content);
-   }
-
-    /**
-     * 保存文件,并返回文件的访问路径
-     *
-     * @param path 文件路径
-     * @param content 文件内容
-     * @return 文件路径
-     */
-    String createFile(String path, byte[] content) throws Exception;
+    String createFile(String originalName, byte[] content) throws Exception;
 
 }

+ 2 - 2
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java

@@ -19,8 +19,8 @@ public class FileApiImpl implements FileApi {
     private FileService fileService;
 
     @Override
-    public String createFile(String path, byte[] content) throws Exception {
-        return fileService.createFile(path, content);
+    public String createFile(String originalName, byte[] content) throws Exception {
+        return fileService.createFile(originalName, content);
     }
 
 }

+ 3 - 5
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java

@@ -40,13 +40,11 @@ public class FileController {
     @PostMapping("/upload")
     @ApiOperation("上传文件")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "file", value = "文件附件", required = true, dataTypeClass = MultipartFile.class),
-            @ApiImplicitParam(name = "path", value = "文件路径", example = "yudaoyuanma.png", dataTypeClass = String.class)
+            @ApiImplicitParam(name = "file", value = "文件附件", required = true, dataTypeClass = MultipartFile.class)
     })
     @OperateLog(logArgs = false) // 上传文件,没有记录操作日志的必要
-    public CommonResult<String> uploadFile(@RequestParam("file") MultipartFile file,
-                                           @RequestParam(value = "path", required = false) String path) throws Exception {
-        return success(fileService.createFile(path, IoUtil.readBytes(file.getInputStream())));
+    public CommonResult<String> uploadFile(@RequestParam("file") MultipartFile file) throws Exception {
+        return success(fileService.createFile(file.getOriginalFilename(), IoUtil.readBytes(file.getInputStream())));
     }
 
     @DeleteMapping("/delete")

+ 3 - 0
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileRespVO.java

@@ -16,6 +16,9 @@ public class FileRespVO {
     @ApiModelProperty(value = "文件路径", required = true, example = "yudao.jpg")
     private String path;
 
+    @ApiModelProperty(value = "原文件名", required = true, example = "yudao.jpg")
+    private String originalName;
+
     @ApiModelProperty(value = "文件 URL", required = true, example = "https://www.iocoder.cn/yudao.jpg")
     private String url;
 

+ 4 - 0
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java

@@ -33,6 +33,10 @@ public class FileDO extends BaseDO {
      * 关联 {@link FileConfigDO#getId()}
      */
     private Long configId;
+    /**
+     * 原文件名
+     */
+    private String originalName;
     /**
      * 路径,即文件名
      */

+ 2 - 2
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java

@@ -22,11 +22,11 @@ public interface FileService {
     /**
      * 保存文件,并返回文件的访问路径
      *
-     * @param path 文件路径
+     * @param originalName 原文件名称
      * @param content 文件内容
      * @return 文件路径
      */
-    String createFile(String path, byte[] content) throws Exception;
+    String createFile(String originalName, byte[] content) throws Exception;
 
     /**
      * 删除文件

+ 4 - 5
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java

@@ -37,12 +37,10 @@ public class FileServiceImpl implements FileService {
     }
 
     @Override
-    public String createFile(String path, byte[] content) throws Exception {
+    public String createFile(String originalName, byte[] content) throws Exception {
         // 计算默认的 path 名
-        String type = FileTypeUtil.getType(new ByteArrayInputStream(content), path);
-        if (StrUtil.isEmpty(path)) {
-            path = DigestUtil.md5Hex(content) + '.' + type;
-        }
+        String type = FileTypeUtil.getType(new ByteArrayInputStream(content));
+        String path = DigestUtil.md5Hex(content) + '.' + type;
 
         // 上传到文件存储器
         FileClient client = fileConfigService.getMasterFileClient();
@@ -52,6 +50,7 @@ public class FileServiceImpl implements FileService {
         // 保存到数据库
         FileDO file = new FileDO();
         file.setConfigId(client.getId());
+        file.setOriginalName(originalName);
         file.setPath(path);
         file.setUrl(url);
         file.setType(type);

+ 2 - 2
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java

@@ -80,9 +80,9 @@ public class FileServiceTest extends BaseDbUnitTest {
         String url = randomString();
         when(client.upload(same(content), same(path))).thenReturn(url);
         when(client.getId()).thenReturn(10L);
-
+        String originalName = "单测文件名";
         // 调用
-        String result = fileService.createFile(path, content);
+        String result = fileService.createFile(originalName, content);
         // 断言
         assertEquals(result, url);
         // 校验数据

+ 1 - 1
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java

@@ -47,7 +47,7 @@ public class AppUserController {
         if (file.isEmpty()) {
             throw exception(FILE_IS_EMPTY);
         }
-        String avatar = userService.updateUserAvatar(getLoginUserId(), file.getInputStream());
+        String avatar = userService.updateUserAvatar(getLoginUserId(), file.getOriginalFilename(), file.getInputStream());
         return success(avatar);
     }
 

+ 2 - 1
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java

@@ -57,10 +57,11 @@ public interface MemberUserService {
     /**
      * 修改用户头像
      * @param userId 用户id
+     * @param originalName 原文件名
      * @param inputStream 头像文件
      * @return 头像url
      */
-    String updateUserAvatar(Long userId, InputStream inputStream) throws Exception;
+    String updateUserAvatar(Long userId, String originalName, InputStream inputStream) throws Exception;
 
     /**
      * 修改手机

+ 2 - 2
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java

@@ -100,10 +100,10 @@ public class MemberUserServiceImpl implements MemberUserService {
     }
 
     @Override
-    public String updateUserAvatar(Long userId, InputStream avatarFile) throws Exception {
+    public String updateUserAvatar(Long userId, String originalName, InputStream avatarFile) throws Exception {
         this.checkUserExists(userId);
         // 创建文件
-        String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile));
+        String avatar = fileApi.createFile(originalName,IoUtil.readBytes(avatarFile));
         // 更新头像路径
         memberUserMapper.updateById(MemberUserDO.builder().id(userId).avatar(avatar).build());
         return avatar;

+ 3 - 2
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java

@@ -86,9 +86,10 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest {
         ByteArrayInputStream avatarFile = new ByteArrayInputStream(avatarFileBytes);
         // mock 方法
         String avatar = randomString();
-        when(fileApi.createFile(eq(avatarFileBytes))).thenReturn(avatar);
+        String originalName = "单测文件名";
+        when(fileApi.createFile(originalName, eq(avatarFileBytes))).thenReturn(avatar);
         // 调用
-        String str = memberUserService.updateUserAvatar(userId, avatarFile);
+        String str = memberUserService.updateUserAvatar(userId, originalName, avatarFile);
         // 断言
         assertEquals(avatar, str);
     }

+ 3 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java

@@ -97,11 +97,12 @@ public class UserProfileController {
 
     @PutMapping("/update-avatar")
     @ApiOperation("上传用户个人头像")
-    public CommonResult<String> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception {
+    public CommonResult<String> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file,
+                                                 @RequestParam(value = "originalName", required = false) String originalName) throws Exception {
         if (file.isEmpty()) {
             throw ServiceExceptionUtil.exception(FILE_IS_EMPTY);
         }
-        String avatar = userService.updateUserAvatar(getLoginUserId(), file.getInputStream());
+        String avatar = userService.updateUserAvatar(getLoginUserId(), originalName, file.getInputStream());
         return success(avatar);
     }
 

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java

@@ -62,9 +62,10 @@ public interface AdminUserService {
      * 更新用户头像
      *
      * @param id         用户 id
+     * @param originalName 原文件名称
      * @param avatarFile 头像文件
      */
-    String updateUserAvatar(Long id, InputStream avatarFile) throws Exception;
+    String updateUserAvatar(Long id, String originalName, InputStream avatarFile) throws Exception;
 
     /**
      * 修改密码

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@@ -153,10 +153,10 @@ public class AdminUserServiceImpl implements AdminUserService {
     }
 
     @Override
-    public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception {
+    public String updateUserAvatar(Long id, String originalName, InputStream avatarFile) throws Exception {
         checkUserExists(id);
         // 存储文件
-        String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile));
+        String avatar = fileApi.createFile(originalName,IoUtil.readBytes(avatarFile));
         // 更新路径
         AdminUserDO sysUserDO = new AdminUserDO();
         sysUserDO.setId(id);

+ 3 - 2
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java

@@ -225,10 +225,11 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
         ByteArrayInputStream avatarFile = new ByteArrayInputStream(avatarFileBytes);
         // mock 方法
         String avatar = randomString();
-        when(fileApi.createFile(eq(avatarFileBytes))).thenReturn(avatar);
+        String originalName = "单测文件名";
+        when(fileApi.createFile(originalName, eq( avatarFileBytes))).thenReturn(avatar);
 
         // 调用
-        userService.updateUserAvatar(userId, avatarFile);
+        userService.updateUserAvatar(userId, originalName, avatarFile);
         // 断言
         AdminUserDO user = userMapper.selectById(userId);
         assertEquals(avatar, user.getAvatar());