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