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.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
|
@EnableAsync
|
||||||
@MapperScan("edu.whut.smilepicturebackend.mapper")
|
@MapperScan("edu.whut.smilepicturebackend.mapper")
|
||||||
public class SmilePictureBackendApplication {
|
public class SmilePictureBackendApplication {
|
||||||
|
|
||||||
|
@ -91,6 +91,8 @@ public class PictureController {
|
|||||||
// 操作数据库
|
// 操作数据库
|
||||||
boolean result = pictureService.removeById(id);
|
boolean result = pictureService.removeById(id);
|
||||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
||||||
|
//清理图片资源
|
||||||
|
pictureService.clearPictureFile(oldPicture);
|
||||||
return ResultUtils.success(true);
|
return ResultUtils.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ import edu.whut.smilepicturebackend.exception.BusinessException;
|
|||||||
import edu.whut.smilepicturebackend.exception.ErrorCode;
|
import edu.whut.smilepicturebackend.exception.ErrorCode;
|
||||||
import edu.whut.smilepicturebackend.manager.CosManager;
|
import edu.whut.smilepicturebackend.manager.CosManager;
|
||||||
import edu.whut.smilepicturebackend.model.file.UploadPictureResult;
|
import edu.whut.smilepicturebackend.model.file.UploadPictureResult;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
@ -102,4 +102,12 @@ public interface PictureService extends IService<Picture> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Page<PictureVO> listPictureVOByPageWithCache(PictureQueryRequest queryRequest, HttpServletRequest httpRequest);
|
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.BusinessException;
|
||||||
import edu.whut.smilepicturebackend.exception.ErrorCode;
|
import edu.whut.smilepicturebackend.exception.ErrorCode;
|
||||||
import edu.whut.smilepicturebackend.exception.ThrowUtils;
|
import edu.whut.smilepicturebackend.exception.ThrowUtils;
|
||||||
|
import edu.whut.smilepicturebackend.manager.CosManager;
|
||||||
import edu.whut.smilepicturebackend.manager.FileManager;
|
import edu.whut.smilepicturebackend.manager.FileManager;
|
||||||
import edu.whut.smilepicturebackend.manager.cache.MyCacheManager;
|
import edu.whut.smilepicturebackend.manager.cache.MyCacheManager;
|
||||||
import edu.whut.smilepicturebackend.manager.upload.FilePictureUpload;
|
import edu.whut.smilepicturebackend.manager.upload.FilePictureUpload;
|
||||||
@ -37,6 +38,7 @@ import org.jsoup.nodes.Document;
|
|||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.DigestUtils;
|
import org.springframework.util.DigestUtils;
|
||||||
|
|
||||||
@ -64,6 +66,7 @@ public class PictureServiceImpl extends ServiceImpl<PictureMapper, Picture>
|
|||||||
private final FilePictureUpload filePictureUpload;
|
private final FilePictureUpload filePictureUpload;
|
||||||
private final UrlPictureUpload urlPictureUpload;
|
private final UrlPictureUpload urlPictureUpload;
|
||||||
private final MyCacheManager cacheManager;
|
private final MyCacheManager cacheManager;
|
||||||
|
private final CosManager cosManager;
|
||||||
@Override
|
@Override
|
||||||
public void validPicture(Picture picture) {
|
public void validPicture(Picture picture) {
|
||||||
ThrowUtils.throwIf(picture == null, ErrorCode.PARAMS_ERROR);
|
ThrowUtils.throwIf(picture == null, ErrorCode.PARAMS_ERROR);
|
||||||
@ -132,6 +135,7 @@ public class PictureServiceImpl extends ServiceImpl<PictureMapper, Picture>
|
|||||||
picture.setEditTime(new Date());
|
picture.setEditTime(new Date());
|
||||||
}
|
}
|
||||||
boolean result = this.saveOrUpdate(picture);
|
boolean result = this.saveOrUpdate(picture);
|
||||||
|
//todo:如果是更新,清理旧的图片
|
||||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "图片上传失败,数据库操作失败");
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "图片上传失败,数据库操作失败");
|
||||||
return PictureVO.objToVo(picture);
|
return PictureVO.objToVo(picture);
|
||||||
}
|
}
|
||||||
@ -410,6 +414,32 @@ public class PictureServiceImpl extends ServiceImpl<PictureMapper, Picture>
|
|||||||
expire
|
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