From 193c7b9235ae6ffada661ac2ce929ff607d2f7a2 Mon Sep 17 00:00:00 2001 From: xuchang Date: Tue, 6 Apr 2021 17:19:32 +0800 Subject: [PATCH] =?UTF-8?q?--user=3Dxuchang,--message=3D'fms=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B3=BB=E7=BB=9F'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/itools/core/base/CommonResult.java | 2 +- .../com/itools/core/bean/BeanCopyUtils.java | 1 - .../com/itools/core/bean/CommonBaseTimes.java | 5 +- .../core/code/SystemCodeController.java | 7 +- .../itools/core/code/SystemCodeService.java | 7 +- .../itools/core/config/Swagger2Config.java | 7 +- .../core/context/CommonCallContext.java | 7 +- .../context/CommonCallContextBuilder.java | 7 +- .../itools/core/context/CompanyContext.java | 7 +- .../com/itools/core/context/UserContext.java | 7 +- .../com/itools/core/em/SystemCodeBean.java | 7 +- .../itools/core/exception/AppException.java | 7 +- .../core/exception/DataAccessException.java | 7 +- .../core/exception/ExceptionHandle.java | 112 ++++++++++++++++++ .../core/exception/ExceptionParamBuilder.java | 7 +- .../core/exception/FeignExceptionDTO.java | 8 +- .../core/exception/FeignExceptionUtils.java | 8 +- .../core/exception/GlobleException.java | 11 +- .../itools/core/exception/ISystemCode.java | 7 +- .../itools/core/exception/ParamException.java | 7 +- .../java/com/itools/core/log/Constants.java | 7 +- .../java/com/itools/core/log/LogRecorder.java | 6 +- .../java/com/itools/core/log/LogUtil.java | 7 +- .../java/com/itools/core/log/Logable.java | 7 +- .../java/com/itools/core/log/ServerEnv.java | 7 +- .../config/EnableSequenceService.java | 7 +- .../config/SequenceAutoConfiguration.java | 6 +- .../snowflake/config/SequenceProperties.java | 7 +- .../java/com/itools/core/em/FmsCodeBean.java | 33 +++--- .../java/com/itools/core/em/FmsConstants.java | 16 ++- .../core/service/FileHandleService.java | 33 ++++++ .../core/service/FileManagerService.java | 20 +++- .../impl/FastDfsFileManagerServiceImpl.java | 22 +++- .../impl/MinioFileManagerServiceImpl.java | 22 +++- .../impl/NioFileManagerServiceImpl.java | 38 +++++- .../core/result/FmsUploadTokenResult.java | 10 +- .../itools/core/FileSystemApplication.java | 2 + .../FmsFileHandleStrategyController.java | 57 +++++++++ .../controller/FmsFileSystemController.java | 67 +++++++---- .../core/controller/TestController.java | 35 ------ .../service/FmsFileHandleStrategyService.java | 21 ++++ .../core/service/FmsFileSystemService.java | 2 +- .../service/impl/FileHandleServiceImpl.java | 89 ++++++++++++++ .../FmsFileHandleStrategyServiceImpl.java | 78 ++++++++++++ ...Task.java => FmsFileRecordUploadTask.java} | 19 ++- .../impl/FmsFileSystemServiceImpl.java | 53 +++++---- .../src/main/resources/application-dev.yml | 4 +- .../src/main/resources/application.yml | 9 +- 48 files changed, 753 insertions(+), 169 deletions(-) create mode 100644 itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionHandle.java create mode 100644 itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileHandleService.java create mode 100644 itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileHandleStrategyController.java delete mode 100644 itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/TestController.java create mode 100644 itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileHandleStrategyService.java create mode 100644 itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FileHandleServiceImpl.java create mode 100644 itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileHandleStrategyServiceImpl.java rename itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/{task/MyUploadFileTask.java => FmsFileRecordUploadTask.java} (63%) diff --git a/itools-core/itools-common/src/main/java/com/itools/core/base/CommonResult.java b/itools-core/itools-common/src/main/java/com/itools/core/base/CommonResult.java index 4004497..298434e 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/base/CommonResult.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/base/CommonResult.java @@ -84,7 +84,7 @@ public class CommonResult implements Serializable { this.data = data; } - private CommonResult(){} + public CommonResult(){} /** * 构造返回成功对象结果 diff --git a/itools-core/itools-common/src/main/java/com/itools/core/bean/BeanCopyUtils.java b/itools-core/itools-common/src/main/java/com/itools/core/bean/BeanCopyUtils.java index bf69bfe..7fd97f3 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/bean/BeanCopyUtils.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/bean/BeanCopyUtils.java @@ -13,7 +13,6 @@ import java.util.List; * @author: XUCHANG * @time: 2019/12/4 10:51 */ - public class BeanCopyUtils { /** diff --git a/itools-core/itools-common/src/main/java/com/itools/core/bean/CommonBaseTimes.java b/itools-core/itools-common/src/main/java/com/itools/core/bean/CommonBaseTimes.java index ffbd7dc..b5950f8 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/bean/CommonBaseTimes.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/bean/CommonBaseTimes.java @@ -1,7 +1,10 @@ package com.itools.core.bean; /** - * 时间 + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 */ public class CommonBaseTimes extends CommonBaseIdentify { private static final long serialVersionUID = -1915432938815132522L; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeController.java b/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeController.java index de8784d..4f4c5bc 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeController.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeController.java @@ -10,7 +10,12 @@ import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ @RestController @RequestMapping("system") public class SystemCodeController { diff --git a/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeService.java b/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeService.java index 6b66e41..a636e40 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeService.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/code/SystemCodeService.java @@ -13,7 +13,12 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Optional; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ @Component public class SystemCodeService implements BeanPostProcessor { diff --git a/itools-core/itools-common/src/main/java/com/itools/core/config/Swagger2Config.java b/itools-core/itools-common/src/main/java/com/itools/core/config/Swagger2Config.java index f0b05cc..449ebf8 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/config/Swagger2Config.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/config/Swagger2Config.java @@ -11,7 +11,12 @@ import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ @EnableSwagger2 @Configuration public class Swagger2Config { diff --git a/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContext.java b/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContext.java index 7fe063a..34847b6 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContext.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContext.java @@ -2,7 +2,12 @@ package com.itools.core.context; import java.util.Date; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public final class CommonCallContext implements java.io.Serializable { private static final long serialVersionUID = -6192221637110412715L; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContextBuilder.java b/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContextBuilder.java index 2531c9e..b7d663f 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContextBuilder.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/context/CommonCallContextBuilder.java @@ -4,7 +4,12 @@ package com.itools.core.context; import com.itools.core.session.BusinessSessionObject; import com.itools.core.session.BusinessSessionContextHolder; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public final class CommonCallContextBuilder { /** * 构造请求上下文 diff --git a/itools-core/itools-common/src/main/java/com/itools/core/context/CompanyContext.java b/itools-core/itools-common/src/main/java/com/itools/core/context/CompanyContext.java index 559b885..653e380 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/context/CompanyContext.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/context/CompanyContext.java @@ -2,7 +2,12 @@ package com.itools.core.context; import java.io.Serializable; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public class CompanyContext implements Serializable { /** diff --git a/itools-core/itools-common/src/main/java/com/itools/core/context/UserContext.java b/itools-core/itools-common/src/main/java/com/itools/core/context/UserContext.java index 6119f9e..3ba22de 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/context/UserContext.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/context/UserContext.java @@ -4,7 +4,12 @@ package com.itools.core.context; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.Set; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public class UserContext implements Serializable { /** diff --git a/itools-core/itools-common/src/main/java/com/itools/core/em/SystemCodeBean.java b/itools-core/itools-common/src/main/java/com/itools/core/em/SystemCodeBean.java index 1340c65..5889dec 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/em/SystemCodeBean.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/em/SystemCodeBean.java @@ -2,7 +2,12 @@ package com.itools.core.em; import com.itools.core.code.SystemCode; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ @SystemCode public class SystemCodeBean { diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/AppException.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/AppException.java index a8e9074..318d3d0 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/AppException.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/AppException.java @@ -3,7 +3,12 @@ package com.itools.core.exception; import java.util.HashMap; import java.util.Map; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public class AppException extends RuntimeException { private static final long serialVersionUID = -8610734771461037783L; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/DataAccessException.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/DataAccessException.java index ee74f3d..e597c94 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/DataAccessException.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/DataAccessException.java @@ -1,6 +1,11 @@ package com.itools.core.exception; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public class DataAccessException extends Exception { private static final long serialVersionUID = -1219262335729891920L; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionHandle.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionHandle.java new file mode 100644 index 0000000..873098f --- /dev/null +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionHandle.java @@ -0,0 +1,112 @@ +package com.itools.core.exception; + +import com.itools.core.base.CommonResult; +import com.itools.core.code.SystemCodeService; +import feign.codec.DecodeException; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +import java.util.Set; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerExceptionResolver; +import org.springframework.web.servlet.ModelAndView; +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ +@Component +public class ExceptionHandle implements HandlerExceptionResolver, Ordered { + + private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionHandle.class); + + @Value("${system.errorCode}") + private String systemErrorCode; + + @Value("${system.errorMsg:系统处理异常,请联系管理员!}") + private String DEFAULT_ERR_MSG; + + @Autowired + private SystemCodeService systemCodeService; + + @Override + public int getOrder() { + return -2147483648; + } + + @Override + public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + return resolveException0(request, response, handler, ex); + } + + private ModelAndView resolveException0(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){ + String errorCode = systemErrorCode, errorMsg = DEFAULT_ERR_MSG; + if(ex instanceof DecodeException) { + DecodeException decodeException = (DecodeException) ex; + Throwable throwable = decodeException.getCause(); + if(throwable instanceof AppException) { + AppException appException = (AppException) throwable; + errorCode = appException.getErrorCode(); + errorMsg = appException.getErrorMsg(); + if(StringUtils.isEmpty(errorMsg)){ + errorMsg = systemCodeService.getMessage(errorCode, appException.getAll()); + } + LOGGER.error(errorMsg + " : "+ errorCode, appException.getCause()); + } + } + else if (ex instanceof AppException) { + AppException appException = (AppException) ex; + errorCode = appException.getErrorCode(); + errorMsg = appException.getErrorMsg(); + if(StringUtils.isEmpty(errorMsg)){ + errorMsg = systemCodeService.getMessage(errorCode, appException.getAll()); + } + LOGGER.error(errorMsg + " : "+ errorCode, appException.getCause()); + } + else if(ex instanceof ParamException) { + ParamException paramException = (ParamException) ex; + errorCode = paramException.getErrorCode(); + errorMsg = paramException.getErrorMsg(); + LOGGER.error(errorMsg); + } + else if(ex instanceof ConstraintViolationException) { + ConstraintViolationException exs = (ConstraintViolationException) ex; + Set> violations = exs.getConstraintViolations(); + for (ConstraintViolation item : violations) { + errorCode = item.getMessage(); + break; + } + errorMsg = systemCodeService.getMessageOptional(errorCode).orElse("Invalid Parameter"); + LOGGER.error(errorMsg); + } else { +// errorMsg = ex.getMessage(); + LOGGER.error("Uncaught exception", ex); + } + + if(DEFAULT_ERR_MSG.equals(errorMsg)){ + errorMsg = systemCodeService.getMessageOptional(errorCode).orElse(DEFAULT_ERR_MSG); + } + CommonResult commonOuterResponse = new CommonResult(); + commonOuterResponse.setReturnCode(errorCode); + commonOuterResponse.setReturnMsg(errorMsg); + + try { + response.setContentType("application/json;charset=UTF-8"); + response.getOutputStream().write(commonOuterResponse.toString().getBytes(StandardCharsets.UTF_8)); + } catch (Exception ee) { + LOGGER.error("resolveException", ee); + } + + return new ModelAndView(); + } +} \ No newline at end of file diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionParamBuilder.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionParamBuilder.java index 7f9e630..fa85230 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionParamBuilder.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/ExceptionParamBuilder.java @@ -4,7 +4,12 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.Map; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public final class ExceptionParamBuilder { private static ExceptionParamBuilder builder; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionDTO.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionDTO.java index 470c0a1..6b7c844 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionDTO.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionDTO.java @@ -1,10 +1,10 @@ package com.itools.core.exception; /** - * 描述 : - * - * @author lidab - * @date 2018/3/27. + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 */ public class FeignExceptionDTO { diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionUtils.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionUtils.java index 68eb942..d5d4d74 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionUtils.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/FeignExceptionUtils.java @@ -5,10 +5,10 @@ import feign.FeignException; import org.apache.commons.lang3.StringUtils; /** - * 描述 :解析FeignException工具类 - * - * @author lidab - * @date 2018/3/27. + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 */ public class FeignExceptionUtils { diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/GlobleException.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/GlobleException.java index 41ea305..9ed4def 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/GlobleException.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/GlobleException.java @@ -8,9 +8,14 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import javax.servlet.http.HttpServletResponse; - -@Configuration -@ControllerAdvice +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ +//@Configuration +//@ControllerAdvice public class GlobleException { /** diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/ISystemCode.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/ISystemCode.java index 2c2c4a9..04a0ed6 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/ISystemCode.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/ISystemCode.java @@ -1,7 +1,10 @@ package com.itools.core.exception; + /** - * 所有AppException使用的各种异常枚举定义均应该实现此接口 - * + * @project: itools-backend + * @description: 所有AppException使用的各种异常枚举定义均应该实现此接口 + * @author: XUCHANG + * @create: 2021-04-05 14:43 */ public interface ISystemCode { diff --git a/itools-core/itools-common/src/main/java/com/itools/core/exception/ParamException.java b/itools-core/itools-common/src/main/java/com/itools/core/exception/ParamException.java index d304b28..a70ed00 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/exception/ParamException.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/exception/ParamException.java @@ -1,6 +1,11 @@ package com.itools.core.exception; - +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public class ParamException extends RuntimeException { private static final long serialVersionUID = -1L; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/log/Constants.java b/itools-core/itools-common/src/main/java/com/itools/core/log/Constants.java index 9761bca..c336820 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/log/Constants.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/log/Constants.java @@ -2,7 +2,12 @@ package com.itools.core.log; import java.util.HashMap; import java.util.Map; - +/** + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public interface Constants { public final static String SUCCESS = ReturnCode.SUCCESS.code; public final static String FAIL = ReturnCode.FAIL.code; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/log/LogRecorder.java b/itools-core/itools-common/src/main/java/com/itools/core/log/LogRecorder.java index 70595cd..f52914f 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/log/LogRecorder.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/log/LogRecorder.java @@ -22,8 +22,10 @@ import java.util.List; import java.util.concurrent.atomic.AtomicLong; /** - * Logable注解的切面实现 - * @author Lida + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 */ @Aspect @Component diff --git a/itools-core/itools-common/src/main/java/com/itools/core/log/LogUtil.java b/itools-core/itools-common/src/main/java/com/itools/core/log/LogUtil.java index 0ea19ec..2e769b1 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/log/LogUtil.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/log/LogUtil.java @@ -19,7 +19,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - +/** + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ public class LogUtil { private final static ThreadLocal transactionNoInThread = new ThreadLocal(); private final static Map LOGGERS = new HashMap(); diff --git a/itools-core/itools-common/src/main/java/com/itools/core/log/Logable.java b/itools-core/itools-common/src/main/java/com/itools/core/log/Logable.java index 13c7797..8a6f202 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/log/Logable.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/log/Logable.java @@ -4,7 +4,12 @@ import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import java.lang.annotation.*; - +/** + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented diff --git a/itools-core/itools-common/src/main/java/com/itools/core/log/ServerEnv.java b/itools-core/itools-common/src/main/java/com/itools/core/log/ServerEnv.java index 0c244c9..96e13ea 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/log/ServerEnv.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/log/ServerEnv.java @@ -5,7 +5,12 @@ import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import java.net.InetAddress; - +/** + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ @Component public class ServerEnv implements ApplicationListener { private int serverPort; diff --git a/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/EnableSequenceService.java b/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/EnableSequenceService.java index fda1cb6..5f4c0cf 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/EnableSequenceService.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/EnableSequenceService.java @@ -4,7 +4,12 @@ import org.springframework.context.annotation.Import; import java.lang.annotation.*; - +/** + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ @Documented @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceAutoConfiguration.java b/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceAutoConfiguration.java index 1eb3274..27e9a22 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceAutoConfiguration.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceAutoConfiguration.java @@ -12,8 +12,10 @@ import org.springframework.context.annotation.Primary; import org.springframework.data.redis.core.RedisTemplate; /** - * ClassName: SequenceAutoConfiguration - * Description: sequence自动装配 + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 */ @EnableConfigurationProperties({SequenceProperties.class}) //@AutoConfigureAfter(PageHelperAutoConfiguration.class) diff --git a/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceProperties.java b/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceProperties.java index de28c22..11528ef 100644 --- a/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceProperties.java +++ b/itools-core/itools-common/src/main/java/com/itools/core/snowflake/config/SequenceProperties.java @@ -3,9 +3,10 @@ package com.itools.core.snowflake.config; import org.springframework.boot.context.properties.ConfigurationProperties; /** - * ClassName: SequenceProperties
- * Description: sequence配置 - * Date: 2019/03/08 11:07 + * @project: itools-backend + * @description: Logable注解的切面实现 + * @author: XUCHANG + * @create: 2021-04-05 14:43 */ @ConfigurationProperties( prefix = "sequence" diff --git a/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsCodeBean.java b/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsCodeBean.java index f2db455..894387e 100644 --- a/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsCodeBean.java +++ b/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsCodeBean.java @@ -12,53 +12,54 @@ import com.itools.core.code.SystemCode; public class FmsCodeBean { public enum FmsCode { + + FAIL_SYSTEM("FMSCODE00", "系统内部错误,请联系管理员!"), /** * 文件系统内部错误 */ - FAIL("FSS01", "文件系统内部错误"), + FAIL("FMSCODE01", "文件系统内部错误"), /** * BUSINESS_TYPE不存在 */ - ERROR_BUSINESS_TYPE_NOT_EXIST("FSS02", "BUSINESS_TYPE不存在"), + ERROR_BUSINESS_TYPE_NOT_EXIST("FMSCODE02", "BUSINESS_TYPE不存在"), /** * 文件不能为空 */ - ERROR_FILE_IS_NULL("FSS11", "文件不能为空"), + ERROR_FILE_IS_NULL("FMSCODE03", "文件不能为空"), /** * 参数错误 */ - ERROR_PARAMS("FSS12", "参数错误"), + ERROR_PARAMS("FMSCODE04", "参数错误"), /** * 文件上传时间限定超时 */ - ERROR_TIMEOUT("FSS13", "文件上传时间限定超时"), + ERROR_TIMEOUT("FMSCODE05", "文件上传时间限定超时"), /** * 文件大小超过限制 */ - ERROR_FILESIZE_OUT_OFF_LIMIT("FSS14", "文件大小超过限制"), + ERROR_FILESIZE_OUT_OFF_LIMIT("FMSCODE06", "文件大小超过限制"), /** * 该文件类型不允许 */ - ERROR_FILETYPE("FSS15", "该文件类型不允许"), + ERROR_FILETYPE("FMSCODE07", "该文件类型不允许"), /** * 文件ID非法 */ - INVALID_FS_UNIQUE_ID("FSS21", "文件ID非法"), - - ERROR_TRANS_BASE64("FSS22", "文件转base64失败"), + INVALID_FS_UNIQUE_ID("FMSCODE08", "文件ID非法"), + ERROR_TRANS_BASE64("FMSCODE09", "文件转base64失败"), /** * 鉴权失败 */ - INVALID_FS_TOKEN("401", "鉴权失败"), + INVALID_FS_TOKEN("FMSCODE10", "鉴权失败"), /** * 找不到该文件 * 错误码直接放到response中,所以按照http的规范设置 */ - NOT_EXIST_FILE("404", "找不到该文件"), - - FILE_LIMIT_SIZE("FSS23", "文件上传个数受限"), - - FILE_MULTIPART_UPLOAD("FSS24", "批量上传文件失败"), + NOT_EXIST_FILE("FMSCODE11", "找不到该文件"), + FILE_LIMIT_SIZE("FMSCODE12", "文件上传个数受限"), + FILE_MULTIPART_UPLOAD("FMSCODE13", "批量上传文件失败"), + FAIL_FILE_TOKEN("FMSCODE14", "上传申请的TOKEN无效,请重新申请!"), + FILE_TOKEN_NOT_NULL("FMSCODE15", "文件访问的TOKEN不能为空"), ; public final String code; diff --git a/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsConstants.java b/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsConstants.java index 5322ffc..50badfb 100644 --- a/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsConstants.java +++ b/itools-fms/itools-fms-core/src/main/java/com/itools/core/em/FmsConstants.java @@ -5,9 +5,19 @@ package com.itools.core.em; * @author: XUCHANG * @create: 2021-03-28 15:51 */ -public interface FmsConstants { +public class FmsConstants { + /** + * 文件记录的KEY + */ + public static final String FSS_RECORD_ID_SEQ_NAME="FSS:FssRecord:ID"; + /** + * 文件申请上传的token的名称空间 + */ + public static final String FILE_TOKEN_NAME_SPACE="itools:fms:file-token:"; + /** + * 文件通用类型 + */ + public static final String FILE_CURRENCY_TYPE="currency"; - String FSS_RECORD_ID_SEQ_NAME="FSS:FssRecord:ID"; - } diff --git a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileHandleService.java b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileHandleService.java new file mode 100644 index 0000000..8d50488 --- /dev/null +++ b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileHandleService.java @@ -0,0 +1,33 @@ +package com.itools.core.service; + +import com.itools.core.base.CommonResult; +import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsFileUploadResult; +import com.itools.core.result.FmsUploadTokenResult; +import org.springframework.web.multipart.MultipartFile; + +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-02 16:34 + */ +public interface FileHandleService { + /** + * 根据申请的文件token获取返回的上传文件的类型信息 + * @param fileToken 文件token + * @return + */ + CommonResult getFileDetailByToken(String fileToken); + + /** + * 文件策略为NIO + * 执行文件写入和上传 + * @param file 文件 + * @param param 上传参数 + * @param uploadToken 访问token + * @param originalFilename 原文件名称 + * @return + */ + CommonResult saveFileForNio(MultipartFile file, FmsUploadTokenParam param, String uploadToken, String originalFilename); +} diff --git a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileManagerService.java b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileManagerService.java index e2aab47..42a99d3 100644 --- a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileManagerService.java +++ b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/FileManagerService.java @@ -2,6 +2,8 @@ package com.itools.core.service; import com.itools.core.base.CommonResult; import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsBusinessTypeResult; +import com.itools.core.result.FmsFileUploadResult; import org.springframework.web.multipart.MultipartFile; /** @@ -13,15 +15,25 @@ public interface FileManagerService { /** * 批量上传文件 * @param files 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ - CommonResult mutipartUploadFiles(MultipartFile[] files, FmsUploadTokenParam param); + CommonResult mutipartUploadFiles(MultipartFile files, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename); /** * 单个上传文件 * @param file 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ - CommonResult mutipartUploadFiles(MultipartFile file, FmsUploadTokenParam param); + CommonResult singletonUploadFiles(MultipartFile file, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename); } diff --git a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/FastDfsFileManagerServiceImpl.java b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/FastDfsFileManagerServiceImpl.java index a12356c..8b59e43 100644 --- a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/FastDfsFileManagerServiceImpl.java +++ b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/FastDfsFileManagerServiceImpl.java @@ -4,6 +4,8 @@ import com.itools.core.annotation.FileStrategy; import com.itools.core.base.CommonResult; import com.itools.core.em.StrategyType; import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsBusinessTypeResult; +import com.itools.core.result.FmsFileUploadResult; import com.itools.core.service.FileManagerService; import org.springframework.web.multipart.MultipartFile; @@ -18,23 +20,33 @@ public class FastDfsFileManagerServiceImpl implements FileManagerService { /** * 批量上传文件 * @param files 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ @Override - public CommonResult mutipartUploadFiles(MultipartFile[] files, FmsUploadTokenParam param) { - return CommonResult.success(StrategyType.FASTDFS.getType()); + public CommonResult mutipartUploadFiles(MultipartFile files, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename) { + return null; } /** * 单个上传文件 * * @param file 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ @Override - public CommonResult mutipartUploadFiles(MultipartFile file, FmsUploadTokenParam param) { + public CommonResult singletonUploadFiles(MultipartFile file, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename) { return null; } } diff --git a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/MinioFileManagerServiceImpl.java b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/MinioFileManagerServiceImpl.java index 062a426..7b8215b 100644 --- a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/MinioFileManagerServiceImpl.java +++ b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/MinioFileManagerServiceImpl.java @@ -4,6 +4,8 @@ import com.itools.core.annotation.FileStrategy; import com.itools.core.base.CommonResult; import com.itools.core.em.StrategyType; import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsBusinessTypeResult; +import com.itools.core.result.FmsFileUploadResult; import com.itools.core.service.FileManagerService; import org.springframework.web.multipart.MultipartFile; @@ -18,23 +20,33 @@ public class MinioFileManagerServiceImpl implements FileManagerService { /** * 批量上传文件 * @param files 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ @Override - public CommonResult mutipartUploadFiles(MultipartFile[] files, FmsUploadTokenParam param) { - return CommonResult.success(StrategyType.MINIO.getType()); + public CommonResult mutipartUploadFiles(MultipartFile files, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename) { + return null; } /** * 单个上传文件 * * @param file 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ @Override - public CommonResult mutipartUploadFiles(MultipartFile file, FmsUploadTokenParam param) { + public CommonResult singletonUploadFiles(MultipartFile file, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename) { return null; } } diff --git a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/NioFileManagerServiceImpl.java b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/NioFileManagerServiceImpl.java index dea9526..4631913 100644 --- a/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/NioFileManagerServiceImpl.java +++ b/itools-fms/itools-fms-core/src/main/java/com/itools/core/service/impl/NioFileManagerServiceImpl.java @@ -3,8 +3,16 @@ package com.itools.core.service.impl; import com.itools.core.annotation.FileStrategy; import com.itools.core.base.CommonResult; import com.itools.core.em.StrategyType; +import com.itools.core.log.Logable; import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsBusinessTypeResult; +import com.itools.core.result.FmsFileUploadResult; +import com.itools.core.service.FileHandleService; import com.itools.core.service.FileManagerService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; /** @@ -15,26 +23,44 @@ import org.springframework.web.multipart.MultipartFile; */ @FileStrategy(value = StrategyType.NIO) public class NioFileManagerServiceImpl implements FileManagerService { + @Autowired + private FileHandleService fileHandleService; /** * 批量上传文件 * @param files 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ @Override - public CommonResult mutipartUploadFiles(MultipartFile[] files, FmsUploadTokenParam param) { - return CommonResult.success(StrategyType.NIO.getType()); + public CommonResult mutipartUploadFiles(MultipartFile files, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename) { + return null; } /** * 单个上传文件 * * @param file 文件 - * @param param 上传的参数 + * @param uploadToken 文件的token + * @param businessType 文件的类型,以及限制条件 + * @param originalFilename 原名称 * @return */ @Override - public CommonResult mutipartUploadFiles(MultipartFile file, FmsUploadTokenParam param) { - return null; + @Logable + @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) + public CommonResult singletonUploadFiles(MultipartFile file, + String uploadToken, + FmsBusinessTypeResult businessType, + String originalFilename) { + FmsUploadTokenParam param = new FmsUploadTokenParam(); + BeanUtils.copyProperties(businessType , param); + param.setOriginalFilename(originalFilename); + CommonResult fmsFileUploadResultCommonResult = fileHandleService.saveFileForNio(file, param, uploadToken, originalFilename); + return fmsFileUploadResultCommonResult; } } diff --git a/itools-fms/itools-fms-model/src/main/java/com/itools/core/result/FmsUploadTokenResult.java b/itools-fms/itools-fms-model/src/main/java/com/itools/core/result/FmsUploadTokenResult.java index 2eb7f12..673b4ce 100644 --- a/itools-fms/itools-fms-model/src/main/java/com/itools/core/result/FmsUploadTokenResult.java +++ b/itools-fms/itools-fms-model/src/main/java/com/itools/core/result/FmsUploadTokenResult.java @@ -10,9 +10,17 @@ import java.io.Serializable; public class FmsUploadTokenResult implements Serializable { private FmsBusinessTypeResult fsBusinessType; - + /** + * 来源系统 + */ private String fromSystemId; + /** + *是否需加密,后续扩展使用,默认否.0:否 1:是 + */ private String needEncrypt; + /** + * 说明、描述 + */ private String remark; public FmsBusinessTypeResult getFsBusinessType() { diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/FileSystemApplication.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/FileSystemApplication.java index d19c478..e562114 100644 --- a/itools-fms/itools-fms-server/src/main/java/com/itools/core/FileSystemApplication.java +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/FileSystemApplication.java @@ -8,6 +8,7 @@ import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @@ -21,6 +22,7 @@ import org.springframework.web.filter.CorsFilter; @EnableSequenceService @EnableValidator @MapperScan("com.itools.core.mapper") +@EnableAspectJAutoProxy(exposeProxy = true)//exposeProxy类内部可以获取到当前类的代理对象 public class FileSystemApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(FileSystemApplication.class); diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileHandleStrategyController.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileHandleStrategyController.java new file mode 100644 index 0000000..c37bc8c --- /dev/null +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileHandleStrategyController.java @@ -0,0 +1,57 @@ +package com.itools.core.controller; + +import com.itools.core.base.CommonResult; +import com.itools.core.em.FmsCodeBean; +import com.itools.core.exception.AppException; +import com.itools.core.log.Logable; +import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsBusinessTypeResult; +import com.itools.core.result.FmsFileUploadResult; +import com.itools.core.result.FmsUploadTokenResult; +import com.itools.core.service.FmsFileHandleStrategyService; +import com.itools.core.utils.StringUtils; +import com.itools.core.validate.ParamsValidate; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.hibernate.validator.constraints.NotBlank; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotNull; + +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ +@RestController +@ApiOperation("FmsFileHandleStrategyController") +public class FmsFileHandleStrategyController { + @Autowired + private FmsFileHandleStrategyService fmsFileHandleStrategyService; + + /** + * 单个文件上传 + * 返回文件的唯一ID + * @param file + * @param uploadToken + * @return + */ + @RequestMapping(value = "/upload/file",method = RequestMethod.POST) + @Logable + @ApiOperation(value = "文件上传", notes = "文件上传", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "uploadToken", value = "文件上传token", required = true, dataType = "String", paramType = "query") + }) + @ParamsValidate(argsIndexs = {0,1}) + public CommonResult singletonUploadFile(@NotNull(message = "FMSCODE03") MultipartFile file, + @NotBlank(message = "FMSCODE15") String uploadToken) { + + return fmsFileHandleStrategyService.singletonUploadFile(file,uploadToken); + } + +} diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileSystemController.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileSystemController.java index 1750651..b41ece8 100644 --- a/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileSystemController.java +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/FmsFileSystemController.java @@ -1,6 +1,7 @@ package com.itools.core.controller; import com.itools.core.base.CommonResult; +import com.itools.core.context.FileStrategyServiceContext; import com.itools.core.em.FmsCodeBean; import com.itools.core.exception.AppException; import com.itools.core.log.Logable; @@ -9,15 +10,18 @@ import com.itools.core.param.FmsUploadTokenParam; import com.itools.core.param.FmsBusinessTypeParam; import com.itools.core.request.FmsBase64FileUploadRequest; import com.itools.core.result.*; +import com.itools.core.service.FileHandleService; import com.itools.core.service.FmsAccessTokenService; import com.itools.core.service.FmsBusinessTypeService; import com.itools.core.service.FmsFileSystemService; import com.itools.core.utils.Base64Utils; import com.itools.core.utils.StringUtils; import com.itools.core.utils.ZipUtils; +import com.itools.core.validate.ParamsValidate; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.hibernate.validator.constraints.NotBlank; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -28,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile; import sun.misc.BASE64Encoder; import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.NotNull; import java.io.*; import java.net.URLEncoder; import java.util.ArrayList; @@ -49,6 +54,10 @@ public class FmsFileSystemController { @Autowired private FmsFileSystemService fmsFileSystemService; + @Autowired + private FileStrategyServiceContext fileStrategyServiceContext; + @Autowired + private FileHandleService fileHandleService; private static final String SHOW = "show"; @@ -56,6 +65,32 @@ public class FmsFileSystemController { private static final Logger LOGGER = LoggerFactory.getLogger(FmsFileSystemController.class); + /** + * 申请文件上传token + * 仅内部文件服务使用,不应该对外开放 + * @param businessType 文件类型 + * @param fromSystemId 上传的文件来自哪个子系统 + * @param needEncrypt 是否需加密,后续扩展使用,本期不使用,默认否.0:否 1:是 + * @param remark 描述 + * @return + */ + @PostMapping("/apply/token") + @Logable + @ApiOperation(value = "申请文件上传token", notes = "申请文件上传token", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "businessType", value = "文件类型", required = true, dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "fromSystemId", value = "上传的文件来自哪个子系统,系统编号", required = true, dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "needEncrypt", value = "是否需加密,后续扩展使用,本期不使用,默认否.0:否 1:是", required = false, dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "remark", value = "文件描述信息", required = false, dataType = "String", paramType = "query") + }) + public CommonResult applyUploadToken(@RequestParam(required = true, value = "businessType")String businessType, + @RequestParam(required = true, value = "fromSystemId")String fromSystemId, + @RequestParam(required = false, value = "needEncrypt") String needEncrypt, + @RequestParam(required = false, value = "remark")String remark) { + return fmsFileSystemService.applyUploadToken(businessType, fromSystemId, needEncrypt, remark); + } + + @PostMapping("FilePath") @Logable @ApiOperation(value = "获取文件访问路径", notes = "获取文件访问路径", httpMethod = "POST") @@ -85,28 +120,6 @@ public class FmsFileSystemController { @RequestParam(value = "type",required = false) String type) { return fmsFileSystemService.getFileUrlByFileIds(uniqueIds, expiredTime, maxAccessCount, type); } - - /** - * 仅内部微服务使用,不应该对外开放 - * @param businessType - * @param fromSystemId - * @param needEncrypt - * @param remark - * @return - */ - @PostMapping("UploadToken") - @Logable - @ApiOperation(value = "申请文件上传token", notes = "申请文件上传token", httpMethod = "POST") - @ApiImplicitParams({ - @ApiImplicitParam(name = "businessType", value = "文件类型", required = true, dataType = "String", paramType = "query"), - @ApiImplicitParam(name = "fromSystemId", value = "上传的文件来自哪个子系统,系统编号", required = true, dataType = "String", paramType = "query"), - @ApiImplicitParam(name = "needEncrypt", value = "是否需加密,后续扩展使用,本期不使用,默认否.0:否 1:是", required = false, dataType = "String", paramType = "query"), - @ApiImplicitParam(name = "remark", value = "文件描述信息", required = false, dataType = "String", paramType = "query") - }) - public CommonResult applyUploadToken(String businessType, String fromSystemId, @RequestParam(required = false, defaultValue = "0") String needEncrypt, String remark) { - String uploadToken = fmsFileSystemService.applyUploadToken(businessType, fromSystemId, needEncrypt, remark); - return CommonResult.success(uploadToken); - } @GetMapping("File/{uniqueId}") @Logable @@ -170,7 +183,7 @@ public class FmsFileSystemController { @PostMapping("File/BaseSixFour") @Logable @ApiOperation(value = "文件上传", notes = "文件上传", httpMethod = "POST") - public CommonResult uploadFileBase64(@RequestBody(required = true) FmsBase64FileUploadRequest base64Req) { + public CommonResult uploadFileBase64(@RequestBody FmsBase64FileUploadRequest base64Req) { FmsUploadTokenResult fsUploadToken = fmsBusinessTypeService.getFsBusinessTypeByUploadToken(base64Req.getUploadToken()); if (fsUploadToken == null) { throw new AppException(FmsCodeBean.FmsCode.ERROR_TIMEOUT.code); @@ -216,9 +229,10 @@ public class FmsFileSystemController { @ApiImplicitParams({ @ApiImplicitParam(name = "uploadToken", value = "文件上传token", required = true, dataType = "String", paramType = "query") }) - public CommonResult fileUpload(@RequestPart(name = "file", required = true) MultipartFile file, - String uploadToken, - String fileName) { + @ParamsValidate(argsIndexs = {0,1}) + public CommonResult fileUpload(@RequestParam(value = "file")@NotNull(message = "FMSCODE03") MultipartFile file, + @RequestParam(value = "uploadToken") @NotBlank(message = "FMSCODE15") String uploadToken, + @RequestParam(value = "fileName",required = false)String fileName) { //压缩过后的文件名称前端无法获取,额外的字段标识 String originalFilename = file.getOriginalFilename(); if (!StringUtils.isBlank(fileName)){ @@ -229,6 +243,7 @@ public class FmsFileSystemController { // 文件不能为空 throw new AppException(FmsCodeBean.FmsCode.ERROR_FILE_IS_NULL.code); } + FmsUploadTokenResult fsUploadToken = fmsBusinessTypeService.getFsBusinessTypeByUploadToken(uploadToken); if (fsUploadToken == null) { throw new AppException(FmsCodeBean.FmsCode.ERROR_TIMEOUT.code); diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/TestController.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/TestController.java deleted file mode 100644 index 2ad997e..0000000 --- a/itools-fms/itools-fms-server/src/main/java/com/itools/core/controller/TestController.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.itools.core.controller; - -import com.itools.core.base.CommonResult; -import com.itools.core.context.FileStrategyServiceContext; -import com.itools.core.em.StrategyType; -import com.itools.core.service.FileManagerService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @project: itools-backend - * @description: - * @author: XUCHANG - * @create: 2021-04-01 16:23 - */ -@RestController -public class TestController { - @Qualifier("fastDfsFileManagerServiceImpl") - @Autowired - private FileManagerService fileManagerService; - - @Autowired - private FileStrategyServiceContext fileStrategyServiceContext; - @GetMapping("/test") - public CommonResult test(){ - FileManagerService fileManagerService2 = fileStrategyServiceContext.get(StrategyType.NIO.getType()); - return fileManagerService2.mutipartUploadFiles(); - } - @GetMapping("/test2") - public CommonResult test2(){ - return fileManagerService.mutipartUploadFiles(); - } -} diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileHandleStrategyService.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileHandleStrategyService.java new file mode 100644 index 0000000..7163714 --- /dev/null +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileHandleStrategyService.java @@ -0,0 +1,21 @@ +package com.itools.core.service; + +import com.itools.core.base.CommonResult; +import com.itools.core.result.FmsFileUploadResult; +import org.springframework.web.multipart.MultipartFile; + +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:43 + */ +public interface FmsFileHandleStrategyService { + /** + * 单个文件上传 + * @param file 文件 + * @param uploadToken 上传文件token + * @return + */ + CommonResult singletonUploadFile(MultipartFile file, String uploadToken); +} diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileSystemService.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileSystemService.java index 3f8cae6..58d3009 100644 --- a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileSystemService.java +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/FmsFileSystemService.java @@ -47,7 +47,7 @@ public interface FmsFileSystemService { * @param remark * @return */ - String applyUploadToken(String businessType, String fromSystemId, String needEncrypt, String remark); + CommonResult applyUploadToken(String businessType, String fromSystemId, String needEncrypt, String remark); /** diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FileHandleServiceImpl.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FileHandleServiceImpl.java new file mode 100644 index 0000000..622d570 --- /dev/null +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FileHandleServiceImpl.java @@ -0,0 +1,89 @@ +package com.itools.core.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.itools.core.base.CommonResult; +import com.itools.core.em.FmsCodeBean; +import com.itools.core.em.FmsConstants; +import com.itools.core.exception.AppException; +import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsFileUploadResult; +import com.itools.core.result.FmsUploadTokenResult; +import com.itools.core.service.FileHandleService; +import com.itools.core.service.FmsAccessTokenService; +import com.itools.core.service.FmsBusinessTypeService; +import com.itools.core.service.FmsFileSystemService; +import com.itools.core.system.AbstractService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-02 16:36 + */ +@Service +public class FileHandleServiceImpl extends AbstractService implements FileHandleService { + + @Autowired + private StringRedisTemplate stringRedisTemplate; + @Autowired + private ObjectMapper objectMapper; + @Autowired + private FmsBusinessTypeService fmsBusinessTypeService; + + @Autowired + private FmsAccessTokenService fmsAccessTokenService; + + @Autowired + private FmsFileSystemService fmsFileSystemService; + /** + * 根据申请的文件token获取返回的上传文件的类型信息 + * KEY的名称itools:fms:file-token:fileToken + * @param fileToken + * @return + */ + @Override + public CommonResult getFileDetailByToken(String fileToken) { + //判断token是否不存在或者是过期 + boolean hasFileTokenKey = stringRedisTemplate.hasKey(FmsConstants.FILE_TOKEN_NAME_SPACE + fileToken).booleanValue(); + + if (!hasFileTokenKey){ + throw new AppException(FmsCodeBean.FmsCode.FAIL_FILE_TOKEN.code); + } + String tokenParam = stringRedisTemplate.opsForValue().get(FmsConstants.FILE_TOKEN_NAME_SPACE + fileToken); + FmsUploadTokenResult fmsUploadTokenResult = null; + try { + fmsUploadTokenResult = objectMapper.readValue(tokenParam,FmsUploadTokenResult.class); + } catch (IOException e) { + logger.error("JacKJson序列化失败"); + } + return CommonResult.success(fmsUploadTokenResult); + } + + /** + * 文件策略为NIO + * 执行文件写入和上传 + * @param file 文件 + * @param param 上传参数 + * @param uploadToken 访问token + * @param originalFilename 原文件名称 + * @return + */ + @Override + public CommonResult saveFileForNio(MultipartFile file, FmsUploadTokenParam param, String uploadToken, String originalFilename) { + FmsFileUploadResult fmsFileUploadResult = new FmsFileUploadResult(); + param.setOriginalFilename(originalFilename); + String uniqueId = fmsFileSystemService.saveFile(file, param); + stringRedisTemplate.delete(FmsConstants.FILE_TOKEN_NAME_SPACE + uploadToken); + fmsFileUploadResult.setUniqueId(uniqueId); + return CommonResult.success(fmsFileUploadResult); + } +} diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileHandleStrategyServiceImpl.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileHandleStrategyServiceImpl.java new file mode 100644 index 0000000..a01bb3e --- /dev/null +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileHandleStrategyServiceImpl.java @@ -0,0 +1,78 @@ +package com.itools.core.service.impl; + +import com.itools.core.base.CommonResult; +import com.itools.core.context.FileStrategyServiceContext; +import com.itools.core.em.FmsCodeBean; +import com.itools.core.em.FmsConstants; +import com.itools.core.exception.AppException; +import com.itools.core.param.FmsUploadTokenParam; +import com.itools.core.result.FmsBusinessTypeResult; +import com.itools.core.result.FmsFileUploadResult; +import com.itools.core.result.FmsUploadTokenResult; +import com.itools.core.service.FileHandleService; +import com.itools.core.service.FmsFileHandleStrategyService; +import com.itools.core.system.AbstractService; +import com.itools.core.utils.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +/** + * @project: itools-backend + * @description: + * @author: XUCHANG + * @create: 2021-04-05 14:44 + */ +@Service +public class FmsFileHandleStrategyServiceImpl extends AbstractService implements FmsFileHandleStrategyService { + @Autowired + private FileStrategyServiceContext fileStrategyServiceContext; + @Autowired + private FileHandleService fileHandleService; + + + /** + * 单个文件上传 + * + * @param file 文件 + * @param uploadToken 上传文件token + * @return + */ + @Override + @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) + public CommonResult singletonUploadFile(MultipartFile file, String uploadToken) { + //压缩过后的文件名称前端无法获取,额外的字段标识 + String originalFilename = file.getOriginalFilename(); + //返回 + FmsFileUploadResult response = new FmsFileUploadResult(); + //验证文件token + CommonResult fmsUploadTokenResultCommonResult = fileHandleService.getFileDetailByToken(uploadToken); + + FmsBusinessTypeResult businessType = fmsUploadTokenResultCommonResult.getData().getFsBusinessType(); + String fsSize = businessType.getFsSize(); + Long limitSize = Long.parseLong(fsSize); + long fileSize = file.getSize(); + int mult = 102400; + if (fileSize > (limitSize * mult)) { + throw new AppException(FmsCodeBean.FmsCode.ERROR_FILESIZE_OUT_OFF_LIMIT.code); + } + String fsType = businessType.getFsType(); + if (!StringUtils.equals(fsType, FmsConstants.FILE_CURRENCY_TYPE)){ + String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); + String contentType = file.getContentType(); + if (contentType == null || !fsType.contains(suffix.trim().toLowerCase()) || !fsType.contains(contentType)) { + logger.error(FmsCodeBean.FmsCode.ERROR_FILETYPE.code, "文件类型:" + suffix + " || " + contentType); + // 文件后缀错误 + throw new AppException(FmsCodeBean.FmsCode.ERROR_FILETYPE.code); + } + } + //执行文件上传,根据配置的不同策略处理文件上传 + CommonResult fmsFileUploadResultCommonResult = fileStrategyServiceContext.get().singletonUploadFiles(file, uploadToken, businessType, originalFilename); + response.setUniqueId(fmsFileUploadResultCommonResult.getData().getUniqueId()); + + return CommonResult.success(response); + } +} diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/task/MyUploadFileTask.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileRecordUploadTask.java similarity index 63% rename from itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/task/MyUploadFileTask.java rename to itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileRecordUploadTask.java index 89f4d2a..2e5363a 100644 --- a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/task/MyUploadFileTask.java +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileRecordUploadTask.java @@ -1,7 +1,6 @@ -package com.itools.core.service.impl.task; +package com.itools.core.service.impl; import com.itools.core.param.FmsUploadTokenParam; -import com.itools.core.service.impl.FmsFileSystemServiceImpl; import org.springframework.web.multipart.MultipartFile; import java.util.concurrent.Callable; @@ -11,13 +10,25 @@ import java.util.concurrent.Callable; * @author: XUCHANG * @create: 2021-03-28 15:51 */ -public class MyUploadFileTask implements Callable { +public class FmsFileRecordUploadTask implements Callable { + /** + * 自身实现 + */ private FmsFileSystemServiceImpl self; + /** + * 上传的文件 + */ private MultipartFile file; + /** + * 文件的访问的token获取的信息 + */ private FmsUploadTokenParam param; + /** + * 生成的UUID + */ private String uuid; - public MyUploadFileTask(FmsFileSystemServiceImpl self, MultipartFile file, FmsUploadTokenParam param, String uuid) { + public FmsFileRecordUploadTask(FmsFileSystemServiceImpl self, MultipartFile file, FmsUploadTokenParam param, String uuid) { this.self = self; this.file = file; this.param = param; diff --git a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileSystemServiceImpl.java b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileSystemServiceImpl.java index cb04324..27eec26 100644 --- a/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileSystemServiceImpl.java +++ b/itools-fms/itools-fms-server/src/main/java/com/itools/core/service/impl/FmsFileSystemServiceImpl.java @@ -1,6 +1,8 @@ package com.itools.core.service.impl; import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.itools.core.base.CommonResult; import com.itools.core.dto.accessToken.FmsAccessTokenDTO; import com.itools.core.dto.fileRecord.FmsRecordDTO; @@ -15,7 +17,6 @@ import com.itools.core.param.FmsUploadTokenParam; import com.itools.core.param.FmsBusinessTypeParam; import com.itools.core.result.*; import com.itools.core.service.FmsFileSystemService; -import com.itools.core.service.impl.task.MyUploadFileTask; import com.itools.core.snowflake.SequenceService; import com.itools.core.utils.CollectionUtils; import com.itools.core.utils.UUIDUtils; @@ -26,6 +27,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -49,40 +51,45 @@ import java.util.concurrent.TimeUnit; @Service public class FmsFileSystemServiceImpl implements FmsFileSystemService { - - @Value("${fileStoreRootPath}") + @Value("${fms.file.store-root-path}") String fileStoreRootPath; - @Value("${fileAccessUrlForOutter}") + @Value("${fms.file.access-url-for-outter}") String fileAccessUrlForOutter; - @Value("${fileUploadLimitSize}") + @Value("${fms.file.upload-limit-size}") Integer fileUploadLimitSize; - @Value("${fileMaxRequestSize}") + @Value("${fms.file.max-request-size}") Integer fileMaxRequestSize; - @Value("${fileMaxFileSize}") + @Value("${fms.file.max-file-size}") Integer fileMaxFileSize; + @Value("${fms.token-expiration-time}") + Integer tokenExpirationTime; + @Autowired FmsFileSystemServiceImpl self; @Autowired - SequenceService sequenceService; + private SequenceService sequenceService; @Autowired - FmsBusinessTypeServiceImpl fmsBusinessTypeService; + private FmsBusinessTypeServiceImpl fmsBusinessTypeService; @Autowired - RedisTemplate redisTemplate; + private RedisTemplate redisTemplate; + @Autowired + private StringRedisTemplate stringRedisTemplate; + @Autowired + private ObjectMapper objectMapper; - @Autowired private FmsFileRecordMapper fmsFileRecordMapper; @Autowired - FmsAccessTokenServiceImpl fmsAccessTokenService; + private FmsAccessTokenServiceImpl fmsAccessTokenService; @Autowired private FmsAccessTokenMapper fmsAccessTokenMapper; @@ -90,8 +97,8 @@ public class FmsFileSystemServiceImpl implements FmsFileSystemService { private Logger logger = LoggerFactory.getLogger(this.getClass()); //文件的type private final static String CURRENCY_TYPE = "currency"; - //线程池:核心线程:5,非核心线程:5,阻塞队列:10 - private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 0, TimeUnit.SECONDS, new LinkedBlockingDeque(10)); + //线程池:核心线程:10,非核心线程:40,阻塞队列:100 + private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 50, 0, TimeUnit.SECONDS, new LinkedBlockingDeque(100)); /** * 根据uniqeId和文件名得到本地文件存储路径 @@ -112,7 +119,6 @@ public class FmsFileSystemServiceImpl implements FmsFileSystemService { return path + fileName; } - /** * 存储文件 @@ -123,7 +129,7 @@ public class FmsFileSystemServiceImpl implements FmsFileSystemService { */ @Override @Logable - @Transactional(rollbackFor = Exception.class) + @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public String saveFile(MultipartFile file, FmsUploadTokenParam fmsUploadTokenParam) { String uuid = UUIDUtils.uuid(); self.saveFileToLocal(file, uuid, fmsUploadTokenParam.getOriginalFilename()); @@ -231,7 +237,7 @@ public class FmsFileSystemServiceImpl implements FmsFileSystemService { */ @Override @Logable - public String applyUploadToken(String businessType, String fromSystemId, String needEncrypt, String remark) { + public CommonResult applyUploadToken(String businessType, String fromSystemId, String needEncrypt, String remark) { if (StringUtils.isBlank(businessType)) { throw new AppException(FmsCodeBean.FmsCode.ERROR_BUSINESS_TYPE_NOT_EXIST.code); } @@ -245,8 +251,15 @@ public class FmsFileSystemServiceImpl implements FmsFileSystemService { fsUploadToken.setFsBusinessType(fsBusinessTypes.get(0)); fsUploadToken.setNeedEncrypt(needEncrypt); fsUploadToken.setRemark(remark); - fmsBusinessTypeService.cacheFsUploadToken(uploadToken, fsUploadToken); - return uploadToken; + //将文件申请的token写入到缓存 + try { + String tokenParam = objectMapper.writeValueAsString(fsUploadToken); + stringRedisTemplate.opsForValue().set((FmsConstants.FILE_TOKEN_NAME_SPACE+uploadToken),tokenParam,tokenExpirationTime,TimeUnit.MINUTES); + } catch (JsonProcessingException e) { + logger.error("JackJson序列化失败"); + } +// fmsBusinessTypeService.cacheFsUploadToken(uploadToken, fsUploadToken); + return CommonResult.success(uploadToken); } @@ -393,7 +406,7 @@ public class FmsFileSystemServiceImpl implements FmsFileSystemService { //执行多线程上传 执行上传的service,文件,参数 // this.saveFile(file,param); String uuid = UUIDUtils.uuid(); - FutureTask futureTask = new FutureTask<>(new MyUploadFileTask(self,file,param,uuid)); + FutureTask futureTask = new FutureTask<>(new FmsFileRecordUploadTask(self,file,param,uuid)); taskList.add(futureTask); //返回信息 FmsMultipartFileResult multipartFileResult = new FmsMultipartFileResult(); diff --git a/itools-fms/itools-fms-server/src/main/resources/application-dev.yml b/itools-fms/itools-fms-server/src/main/resources/application-dev.yml index 63caa35..6dffb75 100644 --- a/itools-fms/itools-fms-server/src/main/resources/application-dev.yml +++ b/itools-fms/itools-fms-server/src/main/resources/application-dev.yml @@ -1,6 +1,6 @@ #组件中的全局异常处理的code system: - errorCode: Code001 + errorCode: FMSCODE00 #分布式雪花算法策略 sequence: enable: true @@ -28,6 +28,8 @@ fileMaxFileSize: 20480 #单个文件最大大小,单位KB,20MB fms: #系统文件管理策略【nio原生的文件系统,miniio文件系统,fastdfs文件系统】 strategy: nio + #文件的token的过期时间单位分钟 + token-expiration-time: 5 #文件配置 file: store-root-path: /data/fmsFile #文件存储路径,此路径应该是多个fms服务的共享磁盘 diff --git a/itools-fms/itools-fms-server/src/main/resources/application.yml b/itools-fms/itools-fms-server/src/main/resources/application.yml index 868ebd7..c197c55 100644 --- a/itools-fms/itools-fms-server/src/main/resources/application.yml +++ b/itools-fms/itools-fms-server/src/main/resources/application.yml @@ -5,10 +5,15 @@ spring: name: itools-fms-server profiles: active: dev - redis: - host: 127.0.0.1 + host: 127.0.0.1 # id + password: + # Redis数据库索引(默认为0) database: 0 + # Redis服务器连接端口 + port: 6379 + # 连接超时时间 单位 ms(毫秒) + timeout: 3000 datasource: type: com.zaxxer.hikari.HikariDataSource -- Gitee