fix:添加删除文件接口
This commit is contained in:
parent
44cb98c714
commit
a6e849581d
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,6 +70,10 @@
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,6 +17,4 @@ public class ServerFileDeleteRequest {
|
||||
@NotBlank(message = "url must not be null")
|
||||
private String url;
|
||||
|
||||
private String appCode;
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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 {
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
6
pom.xml
6
pom.xml
@ -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>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user