From 58882e88119c46c6bd5033f85dc9bbecc1e363a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E8=A2=81=E6=9D=B0=E2=80=9D?= <“yuanjie@zhiyoutec.com”> Date: Thu, 29 Jul 2021 19:55:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=AE=8C=E5=96=84=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BB=A5=E5=8F=8Aoss=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ServerFileController.java | 13 +-- .../handler/ControllerExceptionHandler.java | 74 +++++++++++++++ .../oss/common/constans/CommonConstants.java | 26 ++++++ .../cn/axzo/oss/common/enums/CodeEnum.java | 41 +++++++++ .../oss/common/exception/BizException.java | 90 +++++++++++++++++++ .../oss/common/exception/S3Exception.java | 43 +++++++++ .../cn/axzo/oss/common/utils/Utility.java | 3 + .../oss/dal/repository/impl/FileDaoImpl.java | 4 +- oss-integration/pom.xml | 6 +- .../oss/integration/s3/AliOssService.java | 13 +++ .../integration/s3/base/BaseS3Service.java | 41 +++++++++ .../integration/s3/base/OssClientBase.java | 15 ++++ .../integration/s3/client/AliOssClient.java | 50 +++++++++++ .../integration/s3/config/AliOssConfig.java | 35 ++++++++ .../s3/impl/AliOssServiceImpl.java | 84 +++++++++++++++++ .../cn/axzo/oss/manager/api/FileManager.java | 4 +- .../api/dto/request/ServerFileUploadDto.java | 11 +++ .../oss/manager/impl/FileManagerImpl.java | 11 ++- .../oss/service/impl/FileServiceImpl.java | 17 ++-- .../cn/axzo/oss/test/FileServiceTest.java | 28 ++++++ .../cn/axzo/oss/test/base/SpringTestBase.java | 18 ++++ pom.xml | 6 ++ 22 files changed, 610 insertions(+), 23 deletions(-) create mode 100644 oss-client/src/main/java/cn/axzo/oss/client/handler/ControllerExceptionHandler.java create mode 100644 oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java create mode 100644 oss-common/src/main/java/cn/axzo/oss/common/exception/BizException.java create mode 100644 oss-common/src/main/java/cn/axzo/oss/common/exception/S3Exception.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/AliOssService.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/OssClientBase.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssClient.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/config/AliOssConfig.java create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java create mode 100644 oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java create mode 100644 oss-test/src/test/java/cn/axzo/oss/test/FileServiceTest.java create mode 100644 oss-test/src/test/java/cn/axzo/oss/test/base/SpringTestBase.java diff --git a/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java b/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java index 547b533..fbf4737 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java @@ -8,6 +8,7 @@ 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.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -23,17 +24,19 @@ import javax.validation.Valid; @RestController public class ServerFileController implements ServerFileServiceApi { - private final FileService fileService; - - public ServerFileController(FileService fileService) { - this.fileService = fileService; - } + @Autowired + private FileService fileService; @Override public CommonResponse upload(@Valid @RequestBody ServerFileUploadRequest request) { return null; } + /** + * 根据文件url删除文件 + * @param request + * @return + */ @Override public CommonResponse delete(@Valid @RequestBody ServerFileDeleteRequest request) { ServerFileDeleteDto dto = BeanConvertUtil.copyBean(request, ServerFileDeleteDto.class); diff --git a/oss-client/src/main/java/cn/axzo/oss/client/handler/ControllerExceptionHandler.java b/oss-client/src/main/java/cn/axzo/oss/client/handler/ControllerExceptionHandler.java new file mode 100644 index 0000000..ceb8e78 --- /dev/null +++ b/oss-client/src/main/java/cn/axzo/oss/client/handler/ControllerExceptionHandler.java @@ -0,0 +1,74 @@ +package cn.axzo.oss.client.handler; + +import cn.axzo.oss.common.enums.CodeEnum; +import cn.axzo.oss.common.exception.BizException; +import cn.axzo.oss.common.exception.S3Exception; +import cn.azxo.framework.common.model.CommonResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @program: oss + * @description: 全局异常捕捉 + * @author: mr.jie + * @date: 2021-07-29 19:51 + **/ +@Slf4j +@RestControllerAdvice +public class ControllerExceptionHandler { + + @ExceptionHandler(value = BizException.class) + public CommonResponse bizException(BizException e){ + log.warn("[oss] ControllerExceptionHandler.bizException Exception", e); + return CommonResponse.error(e.getCode(), e.getMessage()); + } + + @ExceptionHandler(value = S3Exception.class) + public CommonResponse bizException(S3Exception e){ + log.warn("[oss] ControllerExceptionHandler.s3Exception Exception", e); + return CommonResponse.error(e.getCode(), e.getMessage()); + } + + @ExceptionHandler(value = IllegalArgumentException.class) + public CommonResponse handleIllegalArgumentException(IllegalArgumentException e) { + log.error("[oss] ControllerExceptionHandler.handleIllegalArgumentException Exception message ", e); + return CommonResponse.error(CodeEnum.INVALID_PARAMETER.getCode(), e.getMessage()); + } + + @ExceptionHandler(value = DuplicateKeyException.class) + public CommonResponse handleDuplicateKeyException(DuplicateKeyException e) { + log.error("[oss] ControllerExceptionHandler.handleDuplicateKeyException Exception message ", e); + return CommonResponse.error(CodeEnum.REPEATED_REQUEST.getCode(), e.getCause().getMessage()); + } + + @ExceptionHandler(value = Exception.class) + public CommonResponse handleOtherException(Exception e) { + log.error("[oss] ControllerExceptionHandler.handleOtherException Exception", e); + return CommonResponse.error(CodeEnum.SYSTEM_ERROR.getCode(), CodeEnum.SYSTEM_ERROR.getMessage()); + } + + @ExceptionHandler(value = Throwable.class) + public CommonResponse handleThrowableException(Throwable e) { + log.error("[oss] ControllerExceptionHandler.handleThrowableException Exception", e); + return CommonResponse.error(CodeEnum.SYSTEM_ERROR.getCode(), CodeEnum.SYSTEM_ERROR.getMessage()); + } + + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public CommonResponse handleArgumentValidException(MethodArgumentNotValidException e){ + log.warn("[oss] ControllerExceptionHandler.handleArgumentValidException Exception", e.getMessage()); + BindingResult bindingResult = e.getBindingResult(); + StringBuilder errorMsg = new StringBuilder(); + for (FieldError fieldError : bindingResult.getFieldErrors()) { + if (-1 == errorMsg.indexOf(fieldError.getDefaultMessage())) { + errorMsg.append(fieldError.getDefaultMessage()).append(","); + } + } + errorMsg.deleteCharAt(errorMsg.length() - 1); + return CommonResponse.error(CodeEnum.INVALID_PARAMETER.getCode(), errorMsg.toString()); + } +} diff --git a/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java b/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java index 7de66a0..ffa8981 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java @@ -16,4 +16,30 @@ public abstract class CommonConstants { Integer UN_DELETE = 0; Integer DELETE = 1; } + + /** + * 文件状态 + */ + public interface FileStatus { + + /** + * 处理中 + */ + Integer PROCESSING = 0; + + /** + * 上传成功 + */ + Integer SUCCESS = 1; + + /** + * 上传失败 + */ + Integer FAIL = 2; + + /** + * 已删除 + */ + Integer DELETED = 3; + } } diff --git a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java new file mode 100644 index 0000000..c2db033 --- /dev/null +++ b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java @@ -0,0 +1,41 @@ +package cn.axzo.oss.common.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 系统返回码枚举类 + * + * @author zhaoyong_sh + * @see CodeEnum + * @since 2021-05-17 15:57 + */ +@RequiredArgsConstructor +@Getter +public enum CodeEnum implements EnumBase { + + /** + * 系统返回码枚举类 + */ + SUCCESS(200, "success"), + SYSTEM_ERROR(500, "system error"), + FAIL(400, "service exception"), + + /** + * 0-100 系统相关 错误码 + */ + INVALID_PARAMETER(1, "无效的参数"), + REPEATED_REQUEST(2, "重复的请求"), + + /** + * 101-200 业务场景 + */ + S3_CLIENT_NULL(101,"oss client is null") + + ; + + private final Integer code; + + private final String message; + +} \ No newline at end of file diff --git a/oss-common/src/main/java/cn/axzo/oss/common/exception/BizException.java b/oss-common/src/main/java/cn/axzo/oss/common/exception/BizException.java new file mode 100644 index 0000000..df3cb55 --- /dev/null +++ b/oss-common/src/main/java/cn/axzo/oss/common/exception/BizException.java @@ -0,0 +1,90 @@ +package cn.axzo.oss.common.exception; + +import cn.axzo.oss.common.enums.CodeEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * 业务异常 + * + * @author zhaoyong_sh + * @see BizException + * @since 2021-05-17 15:56 + */ +@Getter +@Setter +public class BizException extends RuntimeException { + + private Integer code; + + private String message; + + /** + * 需返回的业务数据 + */ + private Object data; + + public BizException(Integer code) { + this.code = code; + } + + public BizException(CodeEnum returnCode) { + super(returnCode.getMessage()); + this.code = returnCode.getCode(); + this.message = returnCode.getMessage(); + } + + public BizException(CodeEnum returnCode, String message) { + super(returnCode.getMessage()); + this.code = returnCode.getCode(); + this.message = message; + } + + public BizException(Integer code, Throwable cause) { + super(null, cause); + this.code = code; + } + + public BizException(Integer code, String message, Object data) { + super(message); + this.code = code; + this.message = message; + this.data = data; + } + + public BizException(Integer code, String message, Object data, Throwable cause) { + super(message, cause); + this.code = code; + this.message = message; + this.data = data; + } + + public static void error(boolean b, CodeEnum returnCode) { + if (!b) { + throw new BizException(returnCode.getCode(), returnCode.getMessage(), null); + } + } + + public static void error(boolean b, CodeEnum returnCode, String message) { + if (!b) { + throw new BizException(returnCode.getCode(), message, null); + } + } + + public static void error(boolean b, Integer code, String message) { + if (!b) { + throw new BizException(code, message, null); + } + } + + public static void error(boolean b, Integer code, String message, Object data) { + if (!b) { + throw new BizException(code, message, data); + } + } + + public static void error(CodeEnum returnCode) { + throw new BizException(returnCode.getCode(), returnCode.getMessage(), null); + } + +} diff --git a/oss-common/src/main/java/cn/axzo/oss/common/exception/S3Exception.java b/oss-common/src/main/java/cn/axzo/oss/common/exception/S3Exception.java new file mode 100644 index 0000000..5593e15 --- /dev/null +++ b/oss-common/src/main/java/cn/axzo/oss/common/exception/S3Exception.java @@ -0,0 +1,43 @@ +package cn.axzo.oss.common.exception; + +/** + * @program: oss + * @description: 文件上传异常 + * @author: mr.jie + * @date: 2021-07-29 19:28 + **/ +public class S3Exception extends RuntimeException { + + private Integer code; + + private String msg; + + public S3Exception(Integer code, String msg) { + this.code = code; + this.msg = msg; + } + + public void setCode(Integer code) { + this.code = code; + } + + public Integer getCode() { + return code; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getMsg() { + return msg; + } + + @Override + public String toString() { + return "S3Exception{" + + "code=" + code + + ", msg='" + msg + '\'' + + '}'; + } +} diff --git a/oss-common/src/main/java/cn/axzo/oss/common/utils/Utility.java b/oss-common/src/main/java/cn/axzo/oss/common/utils/Utility.java index 3ee13e7..8b7e535 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/utils/Utility.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/utils/Utility.java @@ -1,5 +1,8 @@ package cn.axzo.oss.common.utils; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java index bd5c4fe..a18eac5 100644 --- a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java +++ b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java @@ -1,6 +1,6 @@ package cn.axzo.oss.dal.repository.impl; -import cn.axzo.oss.common.constans.CommonConstants; +import cn.axzo.oss.common.constans.CommonConstants.FileStatus; import cn.axzo.oss.common.constans.CommonConstants.TableDelete; import cn.axzo.oss.dal.entity.File; import cn.axzo.oss.dal.mapper.FileMapper; @@ -21,7 +21,7 @@ public class FileDaoImpl extends ServiceImpl implements FileDa @Override public File getFileByUrlMd5(String urlMd5) { - return lambdaQuery().eq(File::getUrlMd5, urlMd5).eq(File::getIsDelete, TableDelete.UN_DELETE) + return lambdaQuery().eq(File::getUrlMd5, urlMd5).eq(File::getStatus, FileStatus.SUCCESS).eq(File::getIsDelete, TableDelete.UN_DELETE) .last("limit 1").one(); } } diff --git a/oss-integration/pom.xml b/oss-integration/pom.xml index 969c205..28db6e2 100644 --- a/oss-integration/pom.xml +++ b/oss-integration/pom.xml @@ -19,7 +19,11 @@ org.springframework.cloud spring-cloud-starter-openfeign - + + com.aliyun.oss + aliyun-sdk-oss + + diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/AliOssService.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/AliOssService.java new file mode 100644 index 0000000..8808762 --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/AliOssService.java @@ -0,0 +1,13 @@ +package cn.axzo.oss.integration.s3; + +import cn.axzo.oss.integration.s3.base.BaseS3Service; + +/** + * @program: oss + * @description: 阿里云oss服务 + * @author: mr.jie + * @date: 2021-07-29 15:44 + **/ +public interface AliOssService extends BaseS3Service { + +} diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java index 464f6a1..7ed1484 100644 --- a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java @@ -1,5 +1,10 @@ package cn.axzo.oss.integration.s3.base; +import java.io.FilterInputStream; +import java.io.InputStream; +import org.springframework.http.ResponseEntity; +import org.springframework.web.multipart.MultipartFile; + /** * @Author admin * @Description @@ -7,7 +12,43 @@ package cn.axzo.oss.integration.s3.base; * @Version 0.0.1 **/ public interface BaseS3Service { + int RECORD_LIMIT = 100; // ttl 15m; 60 * 15 = 900s int DEFAULT_TTL_S = 900; + + /** + * upload file + */ + boolean uploadByStream(InputStream srcStream, String tgtFileKey); + + + /** + * upload multi file + */ + boolean uploadMultiFile(MultipartFile[] multipartFiles); + + /** + * delete file + */ + boolean delFile(String bucket, String tgtFileKey); + + + /** + * download file + */ + ResponseEntity download(String tgtFileKey); + + /** + * get file address + * + * @param ttl second + */ + String getFileAddress(String tgtFileKey, int ttl); + + /** + * get S3Object stream + */ + FilterInputStream getS3ObjectStream(String tgtFileKey); + } diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/OssClientBase.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/OssClientBase.java new file mode 100644 index 0000000..a1e11ee --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/OssClientBase.java @@ -0,0 +1,15 @@ +package cn.axzo.oss.integration.s3.base; + +/** + * @program: oss + * @description: 客户端接口 + * @author: mr.jie + * @date: 2021-07-29 18:07 + **/ +public interface OssClientBase { + + Object getClient(); + + void initClient(); + +} diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssClient.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssClient.java new file mode 100644 index 0000000..92e8944 --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssClient.java @@ -0,0 +1,50 @@ +package cn.axzo.oss.integration.s3.client; + + +import cn.axzo.oss.common.enums.CodeEnum; +import cn.axzo.oss.common.exception.S3Exception; +import cn.axzo.oss.common.utils.Utility; +import cn.axzo.oss.integration.s3.base.OssClientBase; +import cn.axzo.oss.integration.s3.config.AliOssConfig; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import javax.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @program: oss + * @description: 阿里云服务客户端 + * @author: mr.jie + * @date: 2021-07-29 15:49 + **/ +@Component +@Slf4j +public class AliOssClient implements OssClientBase { + private volatile static OSS instance = null; + + @Autowired + private AliOssConfig aliOssConfig; + + public OSS getClient(){ + if (Utility.objIsNull(instance)){ + throw new S3Exception(CodeEnum.S3_CLIENT_NULL.getCode(),"oss客户端未初始化"); + } + return instance; + } + + + @PostConstruct + @Override + public void initClient(){ + log.info("initClient endpoint = {}, accessKeyId = {},secretAccessKey = {}", aliOssConfig.getEndpoint(),aliOssConfig.getAccessKeyId(),aliOssConfig.getSecretAccessKey()); + try { + instance = new OSSClientBuilder().build(aliOssConfig.getEndpoint(),aliOssConfig.getAccessKeyId(),aliOssConfig.getSecretAccessKey()); + } catch (Exception e) { + instance = null; + log.error("initClient error = {}", e); + } + } + +} diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/config/AliOssConfig.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/config/AliOssConfig.java new file mode 100644 index 0000000..8851f93 --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/config/AliOssConfig.java @@ -0,0 +1,35 @@ +package cn.axzo.oss.integration.s3.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * @program: oss + * @description: 阿里云配置 + * @author: mr.jie + * @date: 2021-07-29 17:57 + **/ +@Component +public class AliOssConfig { + + @Value("${aliyun.oss.accessKeyId}") + private String ACCESS_KEY_ID; + + @Value("${aliyun.oss.secretAccessKey}") + private String SECRET_ACCESS_KEY; + + @Value("${aliyun.oss.endpoint}") + private String ENDPOINT; + + public String getAccessKeyId(){ + return this.ACCESS_KEY_ID; + } + + public String getSecretAccessKey(){ + return this.SECRET_ACCESS_KEY; + } + + public String getEndpoint(){ + return this.ENDPOINT; + } +} diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java new file mode 100644 index 0000000..80d5c38 --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java @@ -0,0 +1,84 @@ +package cn.axzo.oss.integration.s3.impl; + +import cn.axzo.oss.integration.s3.AliOssService; +import cn.axzo.oss.integration.s3.client.AliOssClient; +import com.aliyun.oss.ClientException; +import com.aliyun.oss.OSSException; +import java.io.FilterInputStream; +import java.io.InputStream; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +/** + * @program: oss + * @description: 阿里oss服务 + * @author: mr.jie + * @date: 2021-07-29 15:45 + **/ +@Service +@Slf4j +public class AliOssServiceImpl implements AliOssService { + + @Autowired + private AliOssClient aliOssClient; + + /** + * upload file + */ + @Override + public boolean uploadByStream(InputStream srcStream, String tgtFileKey) { + return false; + } + + /** + * upload multi file + */ + @Override + public boolean uploadMultiFile(MultipartFile[] multipartFiles) { + return false; + } + + /** + * delete file + */ + @Override + public boolean delFile(String bucket, String tgtFileKey) { + log.debug("ali oss delFile bucket = {}, tatFileKey = {}", bucket, tgtFileKey); + try { + aliOssClient.getClient().deleteObject(bucket, tgtFileKey); + return Boolean.TRUE; + } catch (Exception e) { + log.error("ali oss delFile error = {}",e); + } + return Boolean.FALSE; + } + + /** + * download file + */ + @Override + public ResponseEntity download(String tgtFileKey) { + return null; + } + + /** + * get file address + * + * @param ttl second + */ + @Override + public String getFileAddress(String tgtFileKey, int ttl) { + return null; + } + + /** + * get S3Object stream + */ + @Override + public FilterInputStream getS3ObjectStream(String tgtFileKey) { + return null; + } +} diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java index 7237a23..e005638 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java @@ -1,6 +1,6 @@ package cn.axzo.oss.manager.api; -import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto; +import cn.axzo.oss.dal.entity.File; /** * @Author admin @@ -10,5 +10,5 @@ import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto; **/ public interface FileManager { - boolean delete(ServerFileDeleteDto dto); + boolean delete(File file); } diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java new file mode 100644 index 0000000..783a9a7 --- /dev/null +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java @@ -0,0 +1,11 @@ +package cn.axzo.oss.manager.api.dto.request; + +/** + * @program: oss + * @description: 文件上传 + * @author: mr.jie + * @date: 2021-07-29 18:31 + **/ +public class ServerFileUploadDto { + +} diff --git a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java index 382212c..af0023e 100644 --- a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java +++ b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java @@ -1,8 +1,8 @@ package cn.axzo.oss.manager.impl; -import cn.axzo.oss.dal.repository.FileDao; +import cn.axzo.oss.dal.entity.File; +import cn.axzo.oss.integration.s3.AliOssService; 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; @@ -17,8 +17,11 @@ import org.springframework.stereotype.Service; @Slf4j public class FileManagerImpl implements FileManager { + @Autowired + private AliOssService aliOssService; + @Override - public boolean delete(ServerFileDeleteDto dto) { -return Boolean.TRUE; + public boolean delete(File file) { + return aliOssService.delFile(file.getBucketName(), file.getFileUuid()); } } diff --git a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java index 0f2852b..9c59f62 100644 --- a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java +++ b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java @@ -1,5 +1,6 @@ package cn.axzo.oss.service.impl; +import cn.axzo.oss.common.constans.CommonConstants.FileStatus; import cn.axzo.oss.common.constans.CommonConstants.TableDelete; import cn.axzo.oss.common.utils.JsonUtil; import cn.axzo.oss.common.utils.Utility; @@ -22,14 +23,11 @@ import org.springframework.stereotype.Service; @Slf4j public class FileServiceImpl implements FileService { - private final FileManager fileManager; + @Autowired + private FileManager fileManager; - private final FileDao fileDao; - - public FileServiceImpl(FileManager fileManager, FileDao fileDao) { - this.fileManager = fileManager; - this.fileDao = fileDao; - } + @Autowired + private FileDao fileDao; /** * 删除文件 @@ -46,13 +44,14 @@ public class FileServiceImpl implements FileService { log.info("delete urlMd5 = {}", urlMd5); File file = fileDao.getFileByUrlMd5(urlMd5); if (Utility.objIsNull(file)){ - log.warn("delete file is null, urlMd5 = {}", urlMd5); + log.warn("delete file is null,url = {}, urlMd5 = {}", dto.getUrl(), urlMd5); return; } - boolean deleteFlag = fileManager.delete(dto); + boolean deleteFlag = fileManager.delete(file); log.info("delete deleteFlag = {}", deleteFlag); if (deleteFlag){ file.setIsDelete(TableDelete.DELETE); + file.setStatus(FileStatus.DELETED); file.setUpdateBy(dto.getOperator()); file.setUpdateAt(null); fileDao.updateById(file); diff --git a/oss-test/src/test/java/cn/axzo/oss/test/FileServiceTest.java b/oss-test/src/test/java/cn/axzo/oss/test/FileServiceTest.java new file mode 100644 index 0000000..d1d4395 --- /dev/null +++ b/oss-test/src/test/java/cn/axzo/oss/test/FileServiceTest.java @@ -0,0 +1,28 @@ +package cn.axzo.oss.test; + +import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto; +import cn.axzo.oss.service.api.FileService; +import cn.axzo.oss.test.base.SpringTestBase; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @program: oss + * @description: 文件服务测试 + * @author: mr.jie + * @date: 2021-07-29 18:42 + **/ +public class FileServiceTest extends SpringTestBase { + + @Autowired + private FileService fileService; + + @Test + public void deleteTest(){ + ServerFileDeleteDto dto = new ServerFileDeleteDto(); + dto.setUrl("https://axzo-pro.oss-cn-hangzhou.aliyuncs.com/stable/face/19700101080046_6296.jpg"); + dto.setOperator("zhangsan"); + fileService.delete(dto); + } + +} diff --git a/oss-test/src/test/java/cn/axzo/oss/test/base/SpringTestBase.java b/oss-test/src/test/java/cn/axzo/oss/test/base/SpringTestBase.java new file mode 100644 index 0000000..60787f6 --- /dev/null +++ b/oss-test/src/test/java/cn/axzo/oss/test/base/SpringTestBase.java @@ -0,0 +1,18 @@ +package cn.axzo.oss.test.base; + +import cn.axzo.oss.client.Bootstrap; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * @program: oss + * @description: 测试基础 + * @author: mr.jie + * @date: 2021-07-29 18:43 + **/ +@SpringBootTest(classes = Bootstrap.class) +@RunWith(SpringJUnit4ClassRunner.class) +public class SpringTestBase { + +} diff --git a/pom.xml b/pom.xml index 1ab4c50..6b5551c 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ 2.2.1.RELEASE Hoxton.SR6 1.10 + 3.10.2 @@ -163,6 +164,11 @@ commons-codec ${commons-codec.version} + + com.aliyun.oss + aliyun-sdk-oss + ${aliyun-oss.version} +