From ff40a2ab1e3dd296da98f16337c709f7fda71666 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Wed, 25 Jun 2025 00:38:43 +0800
Subject: [PATCH] 修改用户头像上传为OBS

---
 oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java |   21 ++++++----
 oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java        |   13 +++++-
 oying-tools/src/main/java/com/oying/service/impl/LocalStorageServiceImpl.java         |   23 ++++++-----
 oying-tools/src/main/resources/mapper/BucketStorageMapper.xml                         |    6 +++
 oying-tools/src/main/java/com/oying/mapper/BucketStorageMapper.java                   |   10 +++-
 oying-tools/src/main/java/com/oying/service/BucketStorageService.java                 |    6 +++
 6 files changed, 55 insertions(+), 24 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java b/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java
index 86fbd18..d6ce91d 100644
--- a/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.domain.BucketStorage;
 import com.oying.modules.security.service.OnlineUserService;
 import com.oying.modules.security.service.UserCacheManager;
 import com.oying.modules.system.domain.Job;
@@ -12,6 +13,7 @@
 import com.oying.modules.system.mapper.UserMapper;
 import com.oying.modules.system.mapper.UserRoleMapper;
 import com.oying.modules.system.service.UserService;
+import com.oying.service.BucketStorageService;
 import com.oying.utils.*;
 import lombok.RequiredArgsConstructor;
 import com.oying.config.properties.FileProperties;
@@ -20,9 +22,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotBlank;
-import java.io.File;
 import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -43,6 +45,7 @@
     private final RedisUtils redisUtils;
     private final UserCacheManager userCacheManager;
     private final OnlineUserService onlineUserService;
+    private final BucketStorageService bucketStorageService;
 
     @Override
     public PageResult<User> queryAll(UserQueryCriteria criteria, Page<Object> page) {
@@ -112,7 +115,7 @@
             redisUtils.del(CacheKey.ROLE_USER + resources.getId());
         }
         // 如果用户被禁用,则清除用户登录信息
-        if(!resources.getEnabled()){
+        if (!resources.getEnabled()) {
             onlineUserService.kickOutForUsername(resources.getUsername());
         }
         user.setUsername(resources.getUsername());
@@ -210,22 +213,22 @@
         // 验证文件上传的格式
         String image = "gif jpg png jpeg";
         String fileType = FileUtil.getExtensionName(multipartFile.getOriginalFilename());
-        if(fileType != null && !image.contains(fileType)){
-            throw new BadRequestException("文件格式错误!, 仅支持 " + image +" 格式");
+        if (fileType != null && !image.contains(fileType)) {
+            throw new BadRequestException("文件格式错误!, 仅支持 " + image + " 格式");
         }
         User user = userMapper.findByUsername(SecurityUtils.getCurrentUsername());
         String oldPath = user.getAvatarPath();
-        File file = FileUtil.upload(multipartFile, properties.getPath().getAvatar());
-        user.setAvatarPath(Objects.requireNonNull(file).getPath());
-        user.setAvatarName(file.getName());
+        BucketStorage bucketStorage = bucketStorageService.create(null, multipartFile);
+        user.setAvatarPath(bucketStorage.getPath());
+        user.setAvatarName(bucketStorage.getRealName());
         saveOrUpdate(user);
         if (StringUtils.isNotBlank(oldPath)) {
-            FileUtil.del(oldPath);
+            bucketStorageService.deleteById(oldPath);
         }
         @NotBlank String username = user.getUsername();
         flushCache(username);
         return new HashMap<String, String>(1) {{
-            put("avatar", file.getName());
+            put("avatar", bucketStorage.getRealName());
         }};
     }
 
diff --git a/oying-tools/src/main/java/com/oying/mapper/BucketStorageMapper.java b/oying-tools/src/main/java/com/oying/mapper/BucketStorageMapper.java
index 395a18c..4c02e1d 100644
--- a/oying-tools/src/main/java/com/oying/mapper/BucketStorageMapper.java
+++ b/oying-tools/src/main/java/com/oying/mapper/BucketStorageMapper.java
@@ -2,7 +2,9 @@
 
 import com.oying.domain.BucketStorage;
 import com.oying.domain.dto.BucketStorageQueryCriteria;
+
 import java.util.List;
+
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -10,13 +12,15 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 /**
-* @author lixin
-* @date 2025-06-03
-**/
+ * @author lixin
+ * @date 2025-06-03
+ **/
 @Mapper
 public interface BucketStorageMapper extends BaseMapper<BucketStorage> {
 
     IPage<BucketStorage> findAll(@Param("criteria") BucketStorageQueryCriteria criteria, Page<Object> page);
 
     List<BucketStorage> findAll(@Param("criteria") BucketStorageQueryCriteria criteria);
+
+    BucketStorage findByPath(@Param("path") String path);
 }
diff --git a/oying-tools/src/main/java/com/oying/service/BucketStorageService.java b/oying-tools/src/main/java/com/oying/service/BucketStorageService.java
index 3b6dd6b..b1e8cfc 100644
--- a/oying-tools/src/main/java/com/oying/service/BucketStorageService.java
+++ b/oying-tools/src/main/java/com/oying/service/BucketStorageService.java
@@ -48,6 +48,12 @@
     void deleteAll(List<Long> ids);
 
     /**
+     * 删除
+     * @param path /
+     */
+    void deleteById(String path);
+
+    /**
     * 导出数据
     * @param all 待导出的数据
     * @param response /
diff --git a/oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java b/oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java
index 8e652c7..f4c2423 100644
--- a/oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java
+++ b/oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java
@@ -1,5 +1,6 @@
 package com.oying.service.impl;
 
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.obs.services.model.AccessControlList;
 import com.obs.services.model.PutObjectResult;
@@ -80,7 +81,7 @@
         FileUtil.checkSize(fileProperties.getMaxSize(), file.getSize());
         String suffix = FileUtil.getExtensionName(file.getOriginalFilename());
         String type = FileUtil.getFileType(suffix);
-        String reaName = System.currentTimeMillis() + "." + suffix;
+        String reaName = IdUtil.getSnowflake(1, 1).nextId() + "." + suffix;
         String objectKey = type + "/" + reaName;
         PutObjectResult result = ObsUtils.putObject(properties, FileUtil.toFile(file), objectKey, AccessControlList.REST_CANNED_PUBLIC_READ);
         if (ObjectUtil.isNull(result)) {
@@ -102,7 +103,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteAll(List<Long> ids) {
-        for(Long id : ids) {
+        for (Long id : ids) {
             BucketStorage storage = bucketStorageMapper.selectById(id);
             ObsUtils.deleteObject(properties, storage.getPath());
         }
@@ -110,6 +111,14 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteById(String path) {
+        BucketStorage storage = bucketStorageMapper.findByPath(path);
+        ObsUtils.deleteObject(properties, storage.getPath());
+        bucketStorageMapper.deleteById(storage.getBucketId());
+    }
+
+    @Override
     public void download(List<BucketStorage> all, HttpServletResponse response) throws IOException {
         List<Map<String, Object>> list = new ArrayList<>();
         for (BucketStorage bucketStorage : all) {
diff --git a/oying-tools/src/main/java/com/oying/service/impl/LocalStorageServiceImpl.java b/oying-tools/src/main/java/com/oying/service/impl/LocalStorageServiceImpl.java
index f9218ff..2d31c95 100644
--- a/oying-tools/src/main/java/com/oying/service/impl/LocalStorageServiceImpl.java
+++ b/oying-tools/src/main/java/com/oying/service/impl/LocalStorageServiceImpl.java
@@ -16,19 +16,22 @@
 import com.oying.service.LocalStorageService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 
 /**
-* @author Z
-* @date 2019-09-05
-*/
+ * @author Z
+ * @date 2019-09-05
+ */
 @Service
 @RequiredArgsConstructor
 public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, LocalStorage> implements LocalStorageService {
@@ -37,23 +40,23 @@
     private final FileProperties properties;
 
     @Override
-    public PageResult<LocalStorage> queryAll(LocalStorageQueryCriteria criteria, Page<Object> page){
+    public PageResult<LocalStorage> queryAll(LocalStorageQueryCriteria criteria, Page<Object> page) {
         return PageUtil.toPage(localStorageMapper.findAll(criteria, page));
     }
 
     @Override
-    public List<LocalStorage> queryAll(LocalStorageQueryCriteria criteria){
+    public List<LocalStorage> queryAll(LocalStorageQueryCriteria criteria) {
         return localStorageMapper.findAll(criteria);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public LocalStorage create(String name, MultipartFile multipartFile) {
-        FileUtil.checkSize(properties.getMaxSize(), multipartFile.getSize());
+        FileUtil.checkSize(0, multipartFile.getSize());
         String suffix = FileUtil.getExtensionName(multipartFile.getOriginalFilename());
         String type = FileUtil.getFileType(suffix);
-        File file = FileUtil.upload(multipartFile, properties.getPath().getPath() + type +  File.separator);
-        if(ObjectUtil.isNull(file)){
+        File file = FileUtil.upload(multipartFile, properties.getPath().getPath() + type + File.separator);
+        if (ObjectUtil.isNull(file)) {
             throw new BadRequestException("上传失败");
         }
         try {
@@ -68,7 +71,7 @@
             );
             save(localStorage);
             return localStorage;
-        }catch (Exception e){
+        } catch (Exception e) {
             FileUtil.del(file);
             throw e;
         }
@@ -96,7 +99,7 @@
     public void download(List<LocalStorage> queryAll, HttpServletResponse response) throws IOException {
         List<Map<String, Object>> list = new ArrayList<>();
         for (LocalStorage localStorage : queryAll) {
-            Map<String,Object> map = new LinkedHashMap<>();
+            Map<String, Object> map = new LinkedHashMap<>();
             map.put("文件名", localStorage.getRealName());
             map.put("备注名", localStorage.getName());
             map.put("文件类型", localStorage.getType());
diff --git a/oying-tools/src/main/resources/mapper/BucketStorageMapper.xml b/oying-tools/src/main/resources/mapper/BucketStorageMapper.xml
index 89949b9..554e2ac 100644
--- a/oying-tools/src/main/resources/mapper/BucketStorageMapper.xml
+++ b/oying-tools/src/main/resources/mapper/BucketStorageMapper.xml
@@ -41,4 +41,10 @@
         </where>
         order by bucket_id desc
     </select>
+    <select id="findByPath" resultType="com.oying.domain.BucketStorage">
+        select
+        <include refid="Base_Column_List"/>
+        from tool_bucket_storage
+        where path = #{path}
+    </select>
 </mapper>

--
Gitblit v1.9.3