fix:添加删除文件接口

This commit is contained in:
“袁杰” 2021-07-29 00:03:33 +08:00
parent 44cb98c714
commit a6e849581d
17 changed files with 320 additions and 3 deletions

View File

@ -1,9 +1,12 @@
package cn.axzo.oss.client.controller;
import cn.axzo.oss.common.utils.BeanConvertUtil;
import cn.axzo.oss.http.api.ServerFileServiceApi;
import cn.axzo.oss.http.model.ServerFileDeleteRequest;
import cn.axzo.oss.http.model.ServerFileUploadRequest;
import cn.axzo.oss.http.model.ServerFileUploadResponse;
import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
import cn.axzo.oss.service.api.FileService;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@ -20,7 +23,11 @@ import javax.validation.Valid;
@RestController
public class ServerFileController implements ServerFileServiceApi {
private final FileService fileService;
public ServerFileController(FileService fileService) {
this.fileService = fileService;
}
@Override
public CommonResponse<ServerFileUploadResponse> upload(@Valid @RequestBody ServerFileUploadRequest request) {
@ -29,6 +36,8 @@ public class ServerFileController implements ServerFileServiceApi {
@Override
public CommonResponse delete(@Valid @RequestBody ServerFileDeleteRequest request) {
return null;
ServerFileDeleteDto dto = BeanConvertUtil.copyBean(request, ServerFileDeleteDto.class);
fileService.delete(dto);
return CommonResponse.success();
}
}

View File

@ -70,6 +70,10 @@
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
</dependencies>
<build>

View File

@ -8,4 +8,12 @@ package cn.axzo.oss.common.constans;
* @since 2021-07-15 11:45
*/
public abstract class CommonConstants {
/**
* 是否删除
*/
public interface TableDelete {
Integer UN_DELETE = 0;
Integer DELETE = 1;
}
}

View File

@ -0,0 +1,28 @@
package cn.axzo.oss.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:53
* @Version 0.0.1
**/
@Slf4j
public class BeanConvertUtil {
public static <T> T copyBean(Object source, Class<T> targetCls) {
T target = null;
if (Utility.objIsNotNull(source)) {
try {
target = BeanUtils.instantiateClass(targetCls);
BeanUtils.copyProperties(source, target);
} catch (BeansException e) {
log.warn("copyBean error, e = {}", e);
}
}
return target;
}
}

View File

@ -0,0 +1,21 @@
package cn.axzo.oss.common.utils;
import com.alibaba.fastjson.JSONObject;
/**
* @Author admin
* @Description
* @Date 2021/7/28 23:37
* @Version 0.0.1
**/
public class JsonUtil {
/**
* 对象转json字符串
* @param obj
* @return
*/
public static String obj2Str(Object obj){
return JSONObject.toJSONString(obj);
}
}

View File

@ -0,0 +1,74 @@
package cn.axzo.oss.common.utils;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Hex;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:54
* @Version 0.0.1
**/
@Slf4j
public class Utility {
/**
* 判断对象为null
* @param obj
* @return
*/
public static boolean objIsNull(Object obj){
return Objects.isNull(obj);
}
/**
* 判断对象不为null
* @param obj
* @return
*/
public static boolean objIsNotNull(Object obj){
return !Objects.isNull(obj);
}
/**
* 字符串为空
* @return
*/
public static boolean isBlank(String str){
int strLen;
if (str == null || (strLen = str.length()) == 0){
return Boolean.TRUE;
}
for (int i = 0; i< strLen; i++){
if ((Character.isWhitespace(str.charAt(i)) == false)){
return false;
}
}
return true;
}
/**
* 获取md5摘要
* @param content
* @return
*/
public static String getMd5(String content){
if (isBlank(content)){
return content;
}
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.reset();
md5.update(content.getBytes(StandardCharsets.UTF_8));
return Hex.encodeHexString(md5.digest());
} catch (NoSuchAlgorithmException e) {
log.warn("getMd5 fail = {}",e.getMessage());
}
return content;
}
}

View File

@ -13,4 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface FileDao extends IService<File> {
/**
* 根据url md5获取文件信息
* @param urlMd5
* @return
*/
File getFileByUrlMd5(String urlMd5);
}

View File

@ -1,5 +1,7 @@
package cn.axzo.oss.dal.repository.impl;
import cn.axzo.oss.common.constans.CommonConstants;
import cn.axzo.oss.common.constans.CommonConstants.TableDelete;
import cn.axzo.oss.dal.entity.File;
import cn.axzo.oss.dal.mapper.FileMapper;
import cn.axzo.oss.dal.repository.FileDao;
@ -17,4 +19,9 @@ import org.springframework.stereotype.Repository;
@Repository("fileDao")
public class FileDaoImpl extends ServiceImpl<FileMapper, File> implements FileDao {
@Override
public File getFileByUrlMd5(String urlMd5) {
return lambdaQuery().eq(File::getUrlMd5, urlMd5).eq(File::getIsDelete, TableDelete.UN_DELETE)
.last("limit 1").one();
}
}

View File

@ -17,6 +17,4 @@ public class ServerFileDeleteRequest {
@NotBlank(message = "url must not be null")
private String url;
private String appCode;
}

View File

@ -0,0 +1,13 @@
package cn.axzo.oss.integration.s3.base;
/**
* @Author admin
* @Description
* @Date 2021/7/28 23:46
* @Version 0.0.1
**/
public interface BaseS3Service {
int RECORD_LIMIT = 100;
// ttl 15m; 60 * 15 = 900s
int DEFAULT_TTL_S = 900;
}

View File

@ -0,0 +1,14 @@
package cn.axzo.oss.manager.api;
import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:48
* @Version 0.0.1
**/
public interface FileManager {
boolean delete(ServerFileDeleteDto dto);
}

View File

@ -0,0 +1,15 @@
package cn.axzo.oss.manager.api.dto.request;
import lombok.Data;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:50
* @Version 0.0.1
**/
@Data
public class ServerFileDeleteDto {
private String url;
private String operator;
}

View File

@ -0,0 +1,11 @@
package cn.axzo.oss.manager.api.dto.response;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:51
* @Version 0.0.1
**/
public class ServerFileDeleteResponse {
}

View File

@ -0,0 +1,24 @@
package cn.axzo.oss.manager.impl;
import cn.axzo.oss.dal.repository.FileDao;
import cn.axzo.oss.manager.api.FileManager;
import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:48
* @Version 0.0.1
**/
@Service
@Slf4j
public class FileManagerImpl implements FileManager {
@Override
public boolean delete(ServerFileDeleteDto dto) {
return Boolean.TRUE;
}
}

View File

@ -0,0 +1,18 @@
package cn.axzo.oss.service.api;
import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:48
* @Version 0.0.1
**/
public interface FileService {
/**
* 删除文件
* @param dto
*/
void delete(ServerFileDeleteDto dto);
}

View File

@ -0,0 +1,61 @@
package cn.axzo.oss.service.impl;
import cn.axzo.oss.common.constans.CommonConstants.TableDelete;
import cn.axzo.oss.common.utils.JsonUtil;
import cn.axzo.oss.common.utils.Utility;
import cn.axzo.oss.dal.entity.File;
import cn.axzo.oss.dal.repository.FileDao;
import cn.axzo.oss.manager.api.FileManager;
import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
import cn.axzo.oss.service.api.FileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Author admin
* @Description
* @Date 2021/7/28 22:48
* @Version 0.0.1
**/
@Service
@Slf4j
public class FileServiceImpl implements FileService {
private final FileManager fileManager;
private final FileDao fileDao;
public FileServiceImpl(FileManager fileManager, FileDao fileDao) {
this.fileManager = fileManager;
this.fileDao = fileDao;
}
/**
* 删除文件
* @param dto
*/
@Override
public void delete(ServerFileDeleteDto dto) {
log.info("delete dto = {}", JsonUtil.obj2Str(dto));
if (Utility.isBlank(dto.getUrl())){
log.warn("delete url is null");
return;
}
String urlMd5 = Utility.getMd5(dto.getUrl());
log.info("delete urlMd5 = {}", urlMd5);
File file = fileDao.getFileByUrlMd5(urlMd5);
if (Utility.objIsNull(file)){
log.warn("delete file is null, urlMd5 = {}", urlMd5);
return;
}
boolean deleteFlag = fileManager.delete(dto);
log.info("delete deleteFlag = {}", deleteFlag);
if (deleteFlag){
file.setIsDelete(TableDelete.DELETE);
file.setUpdateBy(dto.getOperator());
file.setUpdateAt(null);
fileDao.updateById(file);
}
}
}

View File

@ -37,6 +37,7 @@
<velocity-engine-core.version>2.0</velocity-engine-core.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
<commons-codec.version>1.10</commons-codec.version>
</properties>
<modules>
@ -157,6 +158,11 @@
<artifactId>xxl-job-core</artifactId>
<version>${xxl.job.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
</dependencies>
</dependencyManagement>