3.17 图片存储优化,删除cos上无引用的图片
This commit is contained in:
parent
6fcfd80e51
commit
0fd9ef2e83
@ -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 {
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -102,4 +102,12 @@ public interface PictureService extends IService<Picture> {
|
||||
* @return
|
||||
*/
|
||||
Page<PictureVO> listPictureVOByPageWithCache(PictureQueryRequest queryRequest, HttpServletRequest httpRequest);
|
||||
|
||||
|
||||
/**
|
||||
* 清理图片文件
|
||||
*
|
||||
* @param oldPicture
|
||||
*/
|
||||
void clearPictureFile(Picture oldPicture);
|
||||
}
|
||||
|
@ -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<PictureMapper, Picture>
|
||||
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<PictureMapper, Picture>
|
||||
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<PictureMapper, Picture>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user