From 0fd9ef2e8350df6486f1b1eca44bf96c9754424a Mon Sep 17 00:00:00 2001 From: zhangsan <646228430@qq.com> Date: Mon, 17 Mar 2025 14:28:02 +0800 Subject: [PATCH] =?UTF-8?q?3.17=20=E5=9B=BE=E7=89=87=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E5=88=A0=E9=99=A4cos=E4=B8=8A?= =?UTF-8?q?=E6=97=A0=E5=BC=95=E7=94=A8=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SmilePictureBackendApplication.java | 2 ++ .../controller/PictureController.java | 2 ++ .../manager/upload/PictureUploadTemplate.java | 1 + .../service/PictureService.java | 8 +++++ .../service/impl/PictureServiceImpl.java | 30 +++++++++++++++++++ 5 files changed, 43 insertions(+) diff --git a/src/main/java/edu/whut/smilepicturebackend/SmilePictureBackendApplication.java b/src/main/java/edu/whut/smilepicturebackend/SmilePictureBackendApplication.java index b510a0d..3fbbff2 100644 --- a/src/main/java/edu/whut/smilepicturebackend/SmilePictureBackendApplication.java +++ b/src/main/java/edu/whut/smilepicturebackend/SmilePictureBackendApplication.java @@ -3,8 +3,10 @@ package edu.whut.smilepicturebackend; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication +@EnableAsync @MapperScan("edu.whut.smilepicturebackend.mapper") public class SmilePictureBackendApplication { diff --git a/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java b/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java index d4c0f0f..8403ebd 100644 --- a/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java +++ b/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java @@ -91,6 +91,8 @@ public class PictureController { // 操作数据库 boolean result = pictureService.removeById(id); ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); + //清理图片资源 + pictureService.clearPictureFile(oldPicture); return ResultUtils.success(true); } diff --git a/src/main/java/edu/whut/smilepicturebackend/manager/upload/PictureUploadTemplate.java b/src/main/java/edu/whut/smilepicturebackend/manager/upload/PictureUploadTemplate.java index dddf226..d373d1b 100644 --- a/src/main/java/edu/whut/smilepicturebackend/manager/upload/PictureUploadTemplate.java +++ b/src/main/java/edu/whut/smilepicturebackend/manager/upload/PictureUploadTemplate.java @@ -13,6 +13,7 @@ import edu.whut.smilepicturebackend.exception.BusinessException; import edu.whut.smilepicturebackend.exception.ErrorCode; import edu.whut.smilepicturebackend.manager.CosManager; import edu.whut.smilepicturebackend.model.file.UploadPictureResult; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import javax.annotation.Resource; diff --git a/src/main/java/edu/whut/smilepicturebackend/service/PictureService.java b/src/main/java/edu/whut/smilepicturebackend/service/PictureService.java index 13969c9..fba9e72 100644 --- a/src/main/java/edu/whut/smilepicturebackend/service/PictureService.java +++ b/src/main/java/edu/whut/smilepicturebackend/service/PictureService.java @@ -102,4 +102,12 @@ public interface PictureService extends IService { * @return */ Page listPictureVOByPageWithCache(PictureQueryRequest queryRequest, HttpServletRequest httpRequest); + + + /** + * 清理图片文件 + * + * @param oldPicture + */ + void clearPictureFile(Picture oldPicture); } diff --git a/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java b/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java index b0cfcf1..fdd1bb4 100644 --- a/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java +++ b/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java @@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import edu.whut.smilepicturebackend.exception.BusinessException; import edu.whut.smilepicturebackend.exception.ErrorCode; import edu.whut.smilepicturebackend.exception.ThrowUtils; +import edu.whut.smilepicturebackend.manager.CosManager; import edu.whut.smilepicturebackend.manager.FileManager; import edu.whut.smilepicturebackend.manager.cache.MyCacheManager; import edu.whut.smilepicturebackend.manager.upload.FilePictureUpload; @@ -37,6 +38,7 @@ import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.springframework.beans.BeanUtils; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.util.DigestUtils; @@ -64,6 +66,7 @@ public class PictureServiceImpl extends ServiceImpl private final FilePictureUpload filePictureUpload; private final UrlPictureUpload urlPictureUpload; private final MyCacheManager cacheManager; + private final CosManager cosManager; @Override public void validPicture(Picture picture) { ThrowUtils.throwIf(picture == null, ErrorCode.PARAMS_ERROR); @@ -132,6 +135,7 @@ public class PictureServiceImpl extends ServiceImpl picture.setEditTime(new Date()); } boolean result = this.saveOrUpdate(picture); + //todo:如果是更新,清理旧的图片 ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "图片上传失败,数据库操作失败"); return PictureVO.objToVo(picture); } @@ -410,6 +414,32 @@ public class PictureServiceImpl extends ServiceImpl expire ); } + + @Async //异步执行 + @Override + public void clearPictureFile(Picture oldPicture) { + // 判断改图片是否被多条记录使用(图片秒传的情况可能一个cos地址对应多个数据库url) + String pictureUrl = oldPicture.getUrl(); + long count = this.lambdaQuery() + .eq(Picture::getUrl, pictureUrl) + .count(); + // 有不止一条记录用到了该图片,不清理 + if (count > 1) { + return; + } + // 删除图片 + cosManager.deleteObject(pictureUrl); + //删除原图 + String originalUrl=oldPicture.getOriginalUrl(); + if (StrUtil.isNotBlank(originalUrl)) { + cosManager.deleteObject(originalUrl); + } + // 删除缩略图 + String thumbnailUrl = oldPicture.getThumbnailUrl(); + if (StrUtil.isNotBlank(thumbnailUrl)) { + cosManager.deleteObject(thumbnailUrl); + } + } }