Browse Source

优化:调整文件服务的位置

lijie 3 years ago
parent
commit
28de9fdfe7
34 changed files with 417 additions and 665 deletions
  1. 28 5
      dmp-cloud/dmp-file/pom.xml
  2. 2 2
      dmp-comp/dmp-file-minio-starter/src/main/java/com/persagy/dmp/storage/service/impl/MinioExceptionHandler.java
  3. 3 3
      dmp-comp/dmp-file-hdfs-starter/src/main/java/com/persagy/dmp/storage/config/HdfsConfig.java
  4. 5 5
      dmp-comp/dmp-file-minio-starter/src/main/java/com/persagy/dmp/storage/config/MinioConfig.java
  5. 1 1
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/constant/FileStorageEnum.java
  6. 2 3
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileController.java
  7. 0 7
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileMd5Controller.java
  8. 0 12
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileMigrateController.java
  9. 17 10
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/TestController.java
  10. 2 2
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/FileStorageFactory.java
  11. 2 2
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/IFileService.java
  12. 1 1
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/IFileStorageService.java
  13. 4 10
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/FileServiceImpl.java
  14. 8 7
      dmp-comp/dmp-file-hdfs-starter/src/main/java/com/persagy/dmp/storage/service/impl/HdfsStorageServiceImpl.java
  15. 10 12
      dmp-comp/dmp-file-minio-starter/src/main/java/com/persagy/dmp/storage/service/impl/MinioStorageServiceImpl.java
  16. 219 0
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/utils/FileStorageHelper.java
  17. 1 1
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/utils/ImageHelper.java
  18. 0 2
      dmp-comp/dmp-auth/src/main/java/com/persagy/dmp/auth/service/impl/EmsAuthServiceImpl.java
  19. 0 44
      dmp-comp/dmp-file-hdfs-starter/pom.xml
  20. 0 39
      dmp-comp/dmp-file-hdfs-starter/src/main/java/com/persagy/dmp/storage/service/impl/HdfsExceptionHandler.java
  21. 0 33
      dmp-comp/dmp-file-minio-starter/pom.xml
  22. 47 41
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileClientFacade.java
  23. 1 1
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/config/FileFeignConfig.java
  24. 59 37
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileManageClient.java
  25. 0 64
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileMd5Client.java
  26. 0 82
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileMd5ClientFacade.java
  27. 1 1
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/constant/FileCommonConst.java
  28. 1 3
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/model/FileInfoCreator.java
  29. 0 5
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/model/FileMd5Creator.java
  30. 1 2
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/FileRequestData.java
  31. 1 1
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/UploadMes.java
  32. 1 1
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/UploadSubMes.java
  33. 0 224
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/utils/FileStorageHelper.java
  34. 0 2
      dmp-comp/pom.xml

+ 28 - 5
dmp-cloud/dmp-file/pom.xml

@@ -27,14 +27,37 @@
             <artifactId>dmp-mybatis</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.persagy</groupId>
-            <artifactId>dmp-file-minio-starter</artifactId>
-            <version>1.0.0</version>
+            <groupId>jdk.tools</groupId>
+            <artifactId>jdk.tools</artifactId>
+            <version>1.8</version>
+            <scope>system</scope>
+            <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.slf4j/log4j-over-slf4j -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <version>1.7.32</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-common</artifactId>
+            <version>2.5.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-hdfs</artifactId>
+            <version>2.5.1</version>
         </dependency>
         <dependency>
             <groupId>com.persagy</groupId>
-            <artifactId>dmp-file-hdfs-starter</artifactId>
-            <version>1.0.0</version>
+            <artifactId>dmp-file-starter</artifactId>
+        </dependency>
+        <!-- MinIO -->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+            <version>8.3.0</version>
         </dependency>
     </dependencies>
 </project>

+ 2 - 2
dmp-comp/dmp-file-minio-starter/src/main/java/com/persagy/dmp/storage/service/impl/MinioExceptionHandler.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.storage.service.impl;
+package com.persagy.dmp.file.config;
 
 import com.persagy.dmp.common.exception.BusinessException;
 import io.minio.errors.*;
@@ -15,7 +15,7 @@ import java.security.NoSuchAlgorithmException;
  * @date 2021-05-15
  */
 @Slf4j
-public class MinioExceptionHandler {
+public class FileExceptionHandler {
 
     /**
      * Minio异常处理

+ 3 - 3
dmp-comp/dmp-file-hdfs-starter/src/main/java/com/persagy/dmp/storage/config/HdfsConfig.java

@@ -1,9 +1,9 @@
-package com.persagy.dmp.storage.config;
+package com.persagy.dmp.file.config;
 
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
-import com.persagy.dmp.storage.service.IFileStorageService;
-import com.persagy.dmp.storage.service.impl.HdfsStorageServiceImpl;
+import com.persagy.dmp.file.service.IFileStorageService;
+import com.persagy.dmp.file.service.impl.HdfsStorageServiceImpl;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

+ 5 - 5
dmp-comp/dmp-file-minio-starter/src/main/java/com/persagy/dmp/storage/config/MinioConfig.java

@@ -1,7 +1,7 @@
-package com.persagy.dmp.storage.config;
+package com.persagy.dmp.file.config;
 
-import com.persagy.dmp.storage.service.IFileStorageService;
-import com.persagy.dmp.storage.service.impl.MinioStorageServiceImpl;
+import com.persagy.dmp.file.service.IFileStorageService;
+import com.persagy.dmp.file.service.impl.MinioStorageServiceImpl;
 import io.minio.MinioClient;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -30,13 +30,13 @@ public class MinioConfig {
     private String minioRegion;
 
     @Bean
-    @ConditionalOnProperty(value = "persagy.common.file.storage", havingValue = "0")
+    @ConditionalOnProperty(value = "persagy.common.file.storage", havingValue = "0",matchIfMissing = true)
     public MinioClient minioClient() {
         return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).region(minioRegion).build();
     }
 
     @Bean
-    @ConditionalOnProperty(value = "persagy.common.file.storage", havingValue = "0")
+    @ConditionalOnProperty(value = "persagy.common.file.storage", havingValue = "0",matchIfMissing = true)
     public IFileStorageService minioStorageServiceImpl() {
         return new MinioStorageServiceImpl(minioClient());
     }

+ 1 - 1
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/constant/FileStorageEnum.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.storage.constant;
+package com.persagy.dmp.file.constant;
 
 import lombok.Getter;
 

+ 2 - 3
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileController.java

@@ -1,6 +1,5 @@
 package com.persagy.dmp.file.controller;
 
-import cn.hutool.core.util.ReUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.constant.ValidEnum;
@@ -9,10 +8,10 @@ import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.lang.PsDateTime;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
-import com.persagy.dmp.file.domain.FileRequestData;
-import com.persagy.dmp.file.domain.UploadMes;
 import com.persagy.dmp.file.model.FileInfo;
 import com.persagy.dmp.file.model.FileInfoCreator;
+import com.persagy.dmp.file.model.FileRequestData;
+import com.persagy.dmp.file.model.UploadMes;
 import com.persagy.dmp.file.service.IFileService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;

+ 0 - 7
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileMd5Controller.java

@@ -3,22 +3,15 @@ package com.persagy.dmp.file.controller;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.constant.ValidEnum;
-import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.lang.PsDateTime;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
-import com.persagy.dmp.file.domain.FileRequestData;
-import com.persagy.dmp.file.domain.UploadMes;
-import com.persagy.dmp.file.model.FileInfo;
 import com.persagy.dmp.file.model.FileMd5;
 import com.persagy.dmp.file.service.FileMd5Service;
-import com.persagy.dmp.file.service.IFileService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 /**
  * 文件管理Controller
  * @author Charlie Yu

+ 0 - 12
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/FileMigrateController.java

@@ -1,17 +1,10 @@
 package com.persagy.dmp.file.controller;
 
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.io.FastByteArrayOutputStream;
-import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.HttpUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.persagy.dmp.common.constant.ResponseCode;
-import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.lang.PsDateTime;
 import com.persagy.dmp.common.model.response.CommonResult;
@@ -19,14 +12,11 @@ import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.file.model.FileInfo;
 import com.persagy.dmp.file.model.FileInfoCreator;
 import com.persagy.dmp.file.service.IFileService;
-import com.persagy.dmp.mybatis.helper.DynamicDataSourceHelper;
 import io.minio.*;
-import io.minio.errors.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.*;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 import org.springframework.core.io.support.ResourcePatternResolver;
@@ -37,8 +27,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
 import java.util.*;
 
 /**

+ 17 - 10
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/controller/TestController.java

@@ -5,13 +5,12 @@ import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.lang.PsDateTime;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.file.client.FileClientFacade;
 import com.persagy.dmp.file.model.FileInfo;
 import com.persagy.dmp.file.model.FileInfoCreator;
-import com.persagy.dmp.file.service.IFileService;
-import com.persagy.dmp.storage.service.FileStorageFactory;
-import com.persagy.dmp.storage.utils.FileStorageHelper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
+import com.persagy.dmp.file.model.FileRequestData;
+import com.persagy.dmp.file.model.UploadMes;
+import com.persagy.dmp.file.utils.FileStorageHelper;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -33,9 +32,9 @@ public class TestController {
         FileInfo fileInfo = FileInfoCreator.of(AppContext.getContext().getGroupCode(),
                 IdWorker.getIdStr(), "ADM", fileName);
         fileInfo.setCreationTime(new PsDateTime());
-        String fileId = FileStorageHelper.uploadImage(fileInfo, multipartFile.getInputStream());
+        //String fileId = FileStorageHelper.uploadImage(fileInfo, multipartFile.getInputStream());
         FileInfo dest = new FileInfo();
-        dest.setId(fileId);
+        //dest.setId(fileId);
         return ResultHelper.single(dest);
     }
     @PostMapping(value = "/replaceFile")
@@ -46,7 +45,7 @@ public class TestController {
         FileInfo fileInfo = FileInfoCreator.of(AppContext.getContext().getGroupCode(),
                 IdWorker.getIdStr(), "ADM", fileName);
         fileInfo.setCreationTime(new PsDateTime());
-        FileStorageHelper.replaceFile(fileId,fileName, multipartFile.getInputStream());
+        //FileStorageHelper.replaceFile(fileId,fileName, multipartFile.getInputStream());
         FileInfo dest = new FileInfo();
         dest.setId(fileId);
         return ResultHelper.single(dest);
@@ -54,7 +53,7 @@ public class TestController {
     @PostMapping(value = "/deleteFile")
     @CrossOrigin
     public CommonResult<FileInfo> deleteFile(@RequestParam("fileId") String fileId) throws IOException {
-        FileStorageHelper.deleteFile(fileId);
+        //FileStorageHelper.deleteFile(fileId);
         FileInfo dest = new FileInfo();
         dest.setId(fileId);
         return ResultHelper.single(dest);
@@ -62,6 +61,14 @@ public class TestController {
     @PostMapping(value = "/downloadUrl")
     @CrossOrigin
     public CommonResult<FileInfo> downloadUrl(@RequestParam("fileId") String fileId) throws IOException {
-        return ResultHelper.single(FileStorageHelper.downloadUrl(fileId));
+        return ResultHelper.single(new FileInfo());//FileStorageHelper.downloadUrl(fileId));
+    }
+    @PostMapping(value = "/testInitChunkUpload")
+    @CrossOrigin
+    public CommonResult<UploadMes> testInitChunkUpload(@RequestBody FileRequestData requestData) throws IOException {
+        return FileClientFacade.initChunkUploadPrototype(AppContext.getContext().getGroupCode(),
+                AppContext.getContext().getProjectId(),
+                AppContext.getContext().getAppId(),
+                AppContext.getContext().getAccountId(),new FileRequestData());//FileStorageHelper.downloadUrl(fileId));
     }
 }

+ 2 - 2
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/FileStorageFactory.java

@@ -1,7 +1,7 @@
-package com.persagy.dmp.storage.service;
+package com.persagy.dmp.file.service;
 
 import com.persagy.dmp.common.helper.SpringHelper;
-import com.persagy.dmp.storage.constant.FileStorageEnum;
+import com.persagy.dmp.file.constant.FileStorageEnum;
 
 /**
  * 文件存储管理工厂

+ 2 - 2
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/IFileService.java

@@ -1,8 +1,8 @@
 package com.persagy.dmp.file.service;
 
-import com.persagy.dmp.file.domain.FileRequestData;
-import com.persagy.dmp.file.domain.UploadMes;
 import com.persagy.dmp.file.model.FileInfo;
+import com.persagy.dmp.file.model.FileRequestData;
+import com.persagy.dmp.file.model.UploadMes;
 
 import java.util.List;
 

+ 1 - 1
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/IFileStorageService.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.storage.service;
+package com.persagy.dmp.file.service;
 
 import lombok.SneakyThrows;
 

+ 4 - 10
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/service/impl/FileServiceImpl.java

@@ -11,20 +11,14 @@ import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.lang.PsDate;
 import com.persagy.dmp.common.lang.PsDateTime;
 import com.persagy.dmp.file.constant.UploadCodeEnum;
-import com.persagy.dmp.file.domain.FileRequestData;
-import com.persagy.dmp.file.domain.UploadMes;
-import com.persagy.dmp.file.domain.UploadSubMes;
-import com.persagy.dmp.file.model.FileInfo;
-import com.persagy.dmp.file.model.FileInfoCreator;
-import com.persagy.dmp.file.model.FileMd5;
-import com.persagy.dmp.file.model.FileMd5Creator;
+import com.persagy.dmp.file.model.*;
 import com.persagy.dmp.file.service.FileMd5Service;
 import com.persagy.dmp.file.service.IFileService;
 import com.persagy.dmp.file.dao.FileMapper;
 import com.persagy.dmp.common.constant.ValidEnum;
-import com.persagy.dmp.storage.constant.FileCommonConst;
-import com.persagy.dmp.storage.service.FileStorageFactory;
-import com.persagy.dmp.storage.service.IFileStorageService;
+import com.persagy.dmp.file.constant.FileCommonConst;
+import com.persagy.dmp.file.service.FileStorageFactory;
+import com.persagy.dmp.file.service.IFileStorageService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 8 - 7
dmp-comp/dmp-file-hdfs-starter/src/main/java/com/persagy/dmp/storage/service/impl/HdfsStorageServiceImpl.java

@@ -1,10 +1,11 @@
-package com.persagy.dmp.storage.service.impl;
+package com.persagy.dmp.file.service.impl;
 
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
-import com.persagy.dmp.storage.service.IFileStorageService;
+import com.persagy.dmp.file.config.FileExceptionHandler;
+import com.persagy.dmp.file.service.IFileStorageService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hadoop.conf.Configuration;
@@ -52,7 +53,7 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
                 IoUtil.copy(inputStream, outputStream);
             }
         } catch (IOException e) {
-            HdfsExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
     }
 
@@ -75,7 +76,7 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
             }
             return fs.open(filePath);
         } catch (IOException e) {
-            HdfsExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
         return null;
     }
@@ -105,7 +106,7 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
             Path filePath = getFilePath(bucketName,fileName);
             return fs.exists(filePath);
         } catch (IOException e) {
-            HdfsExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
         return false;
     }
@@ -131,7 +132,7 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
             // 非递归删除
             fs.delete(filePath,false);
         } catch (IOException e) {
-            HdfsExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
     }
     /**
@@ -152,7 +153,7 @@ public class HdfsStorageServiceImpl implements IFileStorageService {
             // 递归删除
             fs.delete(filePath,true);
         } catch (IOException e) {
-            HdfsExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
     }
     /***

+ 10 - 12
dmp-comp/dmp-file-minio-starter/src/main/java/com/persagy/dmp/storage/service/impl/MinioStorageServiceImpl.java

@@ -1,12 +1,11 @@
-package com.persagy.dmp.storage.service.impl;
+package com.persagy.dmp.file.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.exception.BusinessException;
-import com.persagy.dmp.file.model.FileMd5;
-import com.persagy.dmp.storage.constant.FileCommonConst;
-import com.persagy.dmp.storage.service.IFileStorageService;
+import com.persagy.dmp.file.config.FileExceptionHandler;
+import com.persagy.dmp.file.constant.FileCommonConst;
+import com.persagy.dmp.file.service.IFileStorageService;
 import io.minio.*;
 import io.minio.http.Method;
 import io.minio.messages.Item;
@@ -16,7 +15,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Value;
 
-import javax.swing.filechooser.FileView;
 import java.io.InputStream;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -65,7 +63,7 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
             minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(fileName).
                             stream(input, input.available(), -1).build());
         } catch (Exception e) {
-            MinioExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
     }
 
@@ -82,7 +80,7 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
 //            return minioClient.getObject(bucketName, fileName);
             return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
         } catch (Exception e) {
-            MinioExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
         return null;
     }
@@ -101,7 +99,7 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
             return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET)
                     .bucket(bucketName).object(fileName).expiry(FileCommonConst.URL_EXPIRES).build());
         } catch (Exception e) {
-            MinioExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
         return null;
     }
@@ -121,7 +119,7 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
             StatObjectResponse stat = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());
             return stat != null;
         } catch (Exception e) {
-            MinioExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
         return false;
     }
@@ -139,7 +137,7 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
 //            minioClient.removeObject(bucketName, fileName);
             minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
         } catch (Exception e) {
-            MinioExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
     }
 
@@ -156,7 +154,7 @@ public class MinioStorageServiceImpl implements IFileStorageService, Initializin
 //            minioClient.removeBucket(bucketName);
             minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
         } catch (Exception e) {
-            MinioExceptionHandler.handleException(e);
+            FileExceptionHandler.handleException(e);
         }
     }
 

+ 219 - 0
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/utils/FileStorageHelper.java

@@ -0,0 +1,219 @@
+package com.persagy.dmp.file.utils;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.crypto.digest.DigestUtil;
+import com.persagy.dmp.common.helper.SpringHelper;
+import com.persagy.dmp.file.client.FileClientFacade;
+import com.persagy.dmp.file.model.FileInfo;
+import com.persagy.dmp.file.model.FileInfoCreator;
+import com.persagy.dmp.file.model.FileMd5;
+import com.persagy.dmp.file.model.FileMd5Creator;
+import com.persagy.dmp.file.service.FileMd5Service;
+import com.persagy.dmp.file.service.FileStorageFactory;
+import com.persagy.dmp.file.constant.FileCommonConst;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.*;
+import java.util.List;
+
+/**
+ * 文件存储助手
+ * @author Charlie Yu
+ * @date 2021-05-15
+ */
+@Slf4j
+public class FileStorageHelper {
+
+//    /**
+//     * 上传文件
+//     * @param fileInfo
+//     * @param in
+//     * @return
+//     */
+//    public static String uploadFile(FileInfo fileInfo, InputStream in) {
+//        // 1.获得文件大小
+//        FileMd5Service fileMd5Service = SpringHelper.getBean(FileMd5Service.class);
+//        byte[] streamBytes = getStreamBytes(in);
+//        fileInfo.setFileSize((long) streamBytes.length);
+//        // 2.获得文件的md5值
+//        String fileMd5Str = DigestUtil.md5Hex(streamBytes);
+//        FileMd5 fileMd5 = fileMd5Service.queryFileMd5ByFileMd5(fileMd5Str);
+//        // 3.创建新的存储的fileInfo
+//        FileInfo saveFileInfo = FileInfoCreator.of(fileInfo.getGroupCode(),fileInfo.getFileName(),
+//                fileInfo.getBusinessId(), fileMd5Str, fileInfo.getExpireDate());
+//        // 4.如果文件MD5信息已存在,则直接保存文件信息即可.秒传
+//        saveFileInfo = FileClientFacade.insert(saveFileInfo);
+//        if (null!=fileMd5
+//                && FileCommonConst.UPLOAD_SUCCESS.equals(fileMd5.getUploadStatus())){
+//            return saveFileInfo.getId();
+//        }
+//        if (null!=fileMd5
+//                && FileCommonConst.UPLOAD_PART.equals(fileMd5.getUploadStatus())){
+//            // 5.文件为断点续传,更改MD5文件信息的文件状态
+//            fileMd5.setFileSize(fileInfo.getFileSize());
+//            fileMd5.setFileBucket(fileInfo.getFileBucket());
+//            fileMd5.setUploadStatus(FileCommonConst.UPLOAD_SUCCESS);
+//            fileMd5.setFileName(fileInfo.getFileName());
+//            fileMd5.setGroupCode(fileInfo.getGroupCode());
+//            fileMd5=fileMd5Service.ensureFilePath(fileMd5);
+//            fileMd5Service.update(fileMd5);
+//        }else {
+//            // 6.没上传过,新建MD5文件信息
+//            fileMd5 = FileMd5Creator.of(fileInfo.getFileBucket(), fileMd5Str, FileCommonConst.UPLOAD_SUCCESS);
+//            fileMd5.setFileName(fileInfo.getFileName());
+//            fileMd5.setGroupCode(fileInfo.getGroupCode());
+//            fileMd5.setFileSize(fileInfo.getFileSize());
+//            fileMd5 = fileMd5Service.insert(fileMd5);
+//        }
+//        FileStorageFactory.getService().upload(fileMd5.getFileBucket(), fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
+//        return saveFileInfo.getId();
+//    }
+//    /***
+//     * Description: 读取流的字节数组
+//     * @param stream : 流
+//     * @return : byte[]
+//     * @author : lijie
+//     * @date :2021/10/23 12:22
+//     * Update By lijie 2021/10/23 12:22
+//     */
+//    private static byte[] getStreamBytes(InputStream stream) {
+//        return IoUtil.readBytes(stream);
+//    }
+//
+//    /**
+//     * 上传图片
+//     * @param fileInfo
+//     * @param in
+//     * @return
+//     */
+//    public static String uploadImage(FileInfo fileInfo, InputStream in) {
+//        // 图片压缩
+//        InputStream cutIn = ImageHelper.cutImage(in);
+//        return uploadFile(fileInfo, cutIn);
+//    }
+//
+//    /**
+//     * 修改文件
+//     * @param fileId
+//     * @param fileName
+//     * @param in
+//     * @return
+//     */
+//    public static String replaceFile(String fileId, String fileName, InputStream in) {
+//        FileInfo fileInfo = FileClientFacade.load(fileId);
+//        byte[] streamBytes = getStreamBytes(in);
+//        // 1.判断文件是否已存在,如果已存在则更新文件信息关联的MD5值即可,秒传
+//        String fileMd5Str = DigestUtil.md5Hex(streamBytes);
+//        FileMd5 newFileMd5 = FileMd5ClientFacade.loadByMd5(fileMd5Str);
+//        if (null!=newFileMd5){
+//            fileInfo.setFileMd5(fileMd5Str);
+//            fileInfo.setFileName(fileName);
+//            FileClientFacade.update(fileInfo);
+//            return fileInfo.getId();
+//        }
+//        // 2.判断md5关联的文件信息是否只有当前一个,如果只有一个则删除历史文件
+//        List<FileInfo> fileInfos = FileClientFacade.queryByFileMd5(fileInfo.getFileMd5());
+//        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
+//        if (CollUtil.isNotEmpty(fileInfos) && fileInfos.size()==1){
+//            // 删除MD5文件信息
+//            FileMd5ClientFacade.delete(fileMd5.getId());
+//            // 删除文件
+//            FileStorageFactory.getService().delete(fileMd5.getFileBucket(), fileMd5.getFilePath());
+//        }
+//        // 3.更新文件信息,然后重新上传文件
+//        FileMd5 uploadFileMd5 = FileMd5Creator.of(fileMd5.getFileBucket(), fileMd5Str, FileCommonConst.UPLOAD_SUCCESS);
+//        uploadFileMd5.setFileName(fileName);
+//        uploadFileMd5.setGroupCode(fileInfo.getGroupCode());
+//        uploadFileMd5.setFileSize((long) streamBytes.length);
+//        uploadFileMd5 = FileMd5ClientFacade.insert(uploadFileMd5);
+//        fileInfo.setFileMd5(fileMd5Str);
+//        fileInfo.setFileName(fileName);
+//        FileClientFacade.update(fileInfo);
+//        FileStorageFactory.getService().upload(uploadFileMd5.getFileBucket(), uploadFileMd5.getFilePath(),
+//                IoUtil.toStream(streamBytes));
+//        return fileInfo.getId();
+//    }
+//
+//    /**
+//     * 更新图片
+//     * @param fileId
+//     * @param fileName
+//     * @param in
+//     * @return
+//     */
+//    public static String replaceImage(String fileId, String fileName, InputStream in) {
+//        // 图片压缩
+//        InputStream cutIn = ImageHelper.cutImage(in);
+//        return replaceFile(fileId, fileName, cutIn);
+//    }
+//
+//    /**
+//     * 删除文件及图片
+//     * @param fileId
+//     */
+//    public static void deleteFile(String fileId) {
+//        FileInfo fileInfo = FileClientFacade.load(fileId);
+//        List<FileInfo> fileInfos = FileClientFacade.queryByFileMd5(fileInfo.getFileMd5());
+//        if (CollUtil.isNotEmpty(fileInfos) && fileInfos.size()>1){
+//            // 多余一个绑定到相同的md5文件上,仅删除文件信息即可
+//            FileClientFacade.delete(fileId);
+//            return;
+//        }
+//        // 只有一个绑定到相同的md5文件上,删除文件信息,文件MD5信息,文件信息
+//        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
+//        FileClientFacade.delete(fileId);
+//        FileMd5ClientFacade.delete(fileMd5.getId());
+//        FileStorageFactory.getService().delete(fileMd5.getFileBucket(), fileMd5.getFilePath());
+//    }
+//
+//    /**
+//     * 下载
+//     * @param fileId 文件id
+//     * @return 文件下载地址
+//     */
+//    public static FileInfo downloadUrl(String fileId) {
+//        FileInfo fileInfo = FileClientFacade.load(fileId);
+//        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
+//        if (null!=fileMd5){
+//            String fetchUrl = FileStorageFactory.getService().fetchUrl(fileMd5.getFileBucket(), fileMd5.getFilePath());
+//            fileInfo.setFileDownloadUrl(fetchUrl);
+//        }
+//        return fileInfo;
+//    }
+//
+//    /**
+//     * 下载
+//     * @param fileId 文件id
+//     * @return 文件流
+//     */
+//    public static InputStream downloadStream(String fileId) {
+//        FileInfo fileInfo = FileClientFacade.load(fileId);
+//        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
+//        return FileStorageFactory.getService().download(fileMd5.getFileBucket(), fileMd5.getFilePath());
+//    }
+//
+//    /**
+//     * 下载
+//     * @param fileId 文件id
+//     * @return 文件内容
+//     */
+//    public static byte[] downloadContent(String fileId) {
+//        // TODO 暂不提供,依赖前端显示规则
+//        return null;
+//    }
+
+    /**
+     * 获取文件大小
+     * @param stream
+     * @return
+     */
+//    private static Long getStreamSize(InputStream stream) {
+//        try {
+//            return Long.valueOf(stream.available());
+//        } catch (IOException e) {
+//            log.error(e.getMessage(), e);
+//            throw new BusinessException("文件上传失败!");
+//        }
+//    }
+}

+ 1 - 1
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/utils/ImageHelper.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.storage.utils;
+package com.persagy.dmp.file.utils;
 
 import cn.hutool.core.img.ImgUtil;
 import lombok.extern.slf4j.Slf4j;

+ 0 - 2
dmp-comp/dmp-auth/src/main/java/com/persagy/dmp/auth/service/impl/EmsAuthServiceImpl.java

@@ -11,8 +11,6 @@ import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.exception.BusinessException;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.servlet.http.HttpServletRequest;

+ 0 - 44
dmp-comp/dmp-file-hdfs-starter/pom.xml

@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>dmp-comp</artifactId>
-        <groupId>com.persagy</groupId>
-        <version>1.0.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>dmp-file-hdfs-starter</artifactId>
-    <dependencies>
-        <dependency>
-            <groupId>jdk.tools</groupId>
-            <artifactId>jdk.tools</artifactId>
-            <version>1.8</version>
-            <scope>system</scope>
-            <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
-        </dependency>
-        <!-- https://mvnrepository.com/artifact/org.slf4j/log4j-over-slf4j -->
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>log4j-over-slf4j</artifactId>
-            <version>1.7.32</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.hadoop</groupId>
-            <artifactId>hadoop-common</artifactId>
-            <version>2.5.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.hadoop</groupId>
-            <artifactId>hadoop-hdfs</artifactId>
-            <version>2.5.1</version>
-        </dependency>
-        <dependency>
-            <groupId>com.persagy</groupId>
-            <artifactId>dmp-file-starter</artifactId>
-            <version>1.0.0</version>
-        </dependency>
-    </dependencies>
-
-</project>

+ 0 - 39
dmp-comp/dmp-file-hdfs-starter/src/main/java/com/persagy/dmp/storage/service/impl/HdfsExceptionHandler.java

@@ -1,39 +0,0 @@
-package com.persagy.dmp.storage.service.impl;
-
-import com.persagy.dmp.common.exception.BusinessException;
-import jdk.nashorn.internal.runtime.regexp.joni.exception.InternalException;
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * MinIO异常处理
- * @author Charlie Yu
- * @date 2021-05-15
- */
-@Slf4j
-public class HdfsExceptionHandler {
-
-    /**
-     * Minio异常处理
-     * @param e 异常
-     */
-    public static void handleException(Exception e) {
-        log.error(e.getMessage(), e);
-        if(e instanceof InvalidKeyException) {
-            throw new BusinessException("文件服务器-密钥有误");
-        }
-        if(e instanceof NoSuchAlgorithmException) {
-            throw new BusinessException("文件服务器密钥有误");
-        }
-        if(e instanceof InternalException) {
-            throw new BusinessException("文件服务器-内部错误。");
-        }
-        if(e instanceof IOException) {
-            throw new BusinessException("文件服务器-连接异常。");
-        }
-        throw new BusinessException(e.getMessage(), e);
-    }
-}

+ 0 - 33
dmp-comp/dmp-file-minio-starter/pom.xml

@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>dmp-comp</artifactId>
-        <groupId>com.persagy</groupId>
-        <version>1.0.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>dmp-file-minio-starter</artifactId>
-
-    <dependencies>
-        <!-- MinIO -->
-        <dependency>
-            <groupId>io.minio</groupId>
-            <artifactId>minio</artifactId>
-            <version>8.3.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.persagy</groupId>
-            <artifactId>dmp-file-starter</artifactId>
-            <version>1.0.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
-            <version>4.8.1</version>
-        </dependency>
-    </dependencies>
-
-</project>

+ 47 - 41
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileClientFacade.java

@@ -1,11 +1,11 @@
 package com.persagy.dmp.file.client;
 
 import cn.hutool.extra.spring.SpringUtil;
-import com.persagy.dmp.file.model.FileInfo;
 import com.persagy.dmp.common.model.response.CommonResult;
-import com.persagy.dmp.common.utils.ResultHelper;
-
-import java.util.List;
+import com.persagy.dmp.file.model.FileInfo;
+import com.persagy.dmp.file.model.FileRequestData;
+import com.persagy.dmp.file.model.UploadMes;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * 文件管理Client门面
@@ -16,51 +16,57 @@ public class FileClientFacade {
 
     private static FileManageClient client = SpringUtil.getBean(FileManageClient.class);
 
-    /**
-     * 新增
-     * @param fileInfo
-     * @return
+    /***
+     * Description: 获取文件上传信息-单个文件
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.UploadMes>
+     * @author : lijie
+     * @date :2021/11/9 10:18
+     * Update By lijie 2021/11/9 10:18
      */
-    public static FileInfo insert(FileInfo fileInfo) {
-        CommonResult<FileInfo> result = client.insert(fileInfo);
-        return ResultHelper.getContent(result);
+    public static CommonResult<UploadMes> initChunkUploadPrototype(String groupCode, String projectId, String appId,
+                                                                   String userId, FileRequestData requestData){
+        return client.initChunkUpload(groupCode, projectId, appId, userId, requestData);
     }
 
-    /**
-     * 修改
-     * @param fileInfo
-     * @return
+    /***
+     * Description: 获取文件上传信息-单个文件
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.UploadMes>
+     * @author : lijie
+     * @date :2021/11/9 10:18
+     * Update By lijie 2021/11/9 10:18
      */
-    public static FileInfo update(FileInfo fileInfo) {
-        CommonResult<FileInfo> result = client.update(fileInfo);
-        return ResultHelper.getContent(result);
+    public static CommonResult<UploadMes> composeFilePrototype(String groupCode, String projectId, String appId,
+                                                                   String userId, FileRequestData requestData){
+        return client.composeFile(groupCode, projectId, appId, userId, requestData);
     }
 
-    /**
-     * 删除
-     * @param fileId
+    /***
+     * Description: 获取文件上传信息-单个文件
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.UploadMes>
+     * @author : lijie
+     * @date :2021/11/9 10:18
+     * Update By lijie 2021/11/9 10:18
      */
-    public static void delete(String fileId) {
-        CommonResult<String> result = client.delete(fileId);
-        ResultHelper.getContent(result);
+    public static CommonResult<UploadMes> initSingleUploadPrototype(String groupCode, String projectId, String appId,
+                                                                    String userId, FileRequestData requestData){
+        return client.initSingleUpload(groupCode, projectId, appId, userId, requestData);
     }
-
-    /**
-     * 查询
-     * @param fileId
-     * @return
+    /***
+     * Description: 获取文件上传信息-单个文件
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.UploadMes>
+     * @author : lijie
+     * @date :2021/11/9 10:18
+     * Update By lijie 2021/11/9 10:18
      */
-    public static FileInfo load(String fileId) {
-        CommonResult<FileInfo> result = client.load(fileId);
-        return ResultHelper.getContent(result);
-    }
-    /**
-     * 查询
-     * @param fileMd5
-     * @return
-     */
-    public static List<FileInfo> queryByFileMd5(String fileMd5) {
-        CommonResult<List<FileInfo>> result = client.queryByFileMd5(fileMd5);
-        return ResultHelper.getContent(result);
+    public static CommonResult<FileInfo> initFileDownloadPrototype(String groupCode, String projectId, String appId,
+                                                                   String userId, FileRequestData requestData){
+        return client.initFileDownload(groupCode, projectId, appId, userId, requestData);
     }
+
+
+
 }

+ 1 - 1
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/config/FileFeignConfig.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.storage.config;
+package com.persagy.dmp.file.client;
 
 import feign.Logger;
 import feign.codec.Encoder;

+ 59 - 37
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileManageClient.java

@@ -1,13 +1,11 @@
 package com.persagy.dmp.file.client;
 
-import com.persagy.dmp.file.model.FileInfo;
 import com.persagy.dmp.common.model.response.CommonResult;
-import com.persagy.dmp.storage.config.FileFeignConfig;
+import com.persagy.dmp.file.model.FileInfo;
+import com.persagy.dmp.file.model.FileRequestData;
+import com.persagy.dmp.file.model.UploadMes;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import java.util.List;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 文件管理Client
@@ -17,42 +15,66 @@ import java.util.List;
 @FeignClient(name = "dmp-file", configuration = FileFeignConfig.class,path = "/file/",url = "${persagy.bdtp.file.service:}")
 public interface FileManageClient {
 
-    /**
-     * 新增文件信息
-     * @param fileInfo 文件信息
-     * @return 文件信息
+    /***
+     * Description: 获取断点续传上传信息
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.UploadMes>
+     * @author : lijie
+     * @date :2021/11/9 10:18
+     * Update By lijie 2021/11/9 10:18
      */
-    @PostMapping("insert")
-    CommonResult<FileInfo> insert(@RequestBody FileInfo fileInfo);
+    @PostMapping("/initChunkUpload")
+    CommonResult<UploadMes> initChunkUpload(@RequestParam("groupCode") String groupCode,
+                                             @RequestParam("projectId") String projectId,
+                                             @RequestParam("appId") String appId,
+                                             @RequestParam("userId") String userId,
+                                             @RequestBody FileRequestData requestData);
 
-    /**
-     * 修改文件信息
-     * @param fileInfo 文件信息
-     * @return 文件信息
+    /***
+     * Description: 合并断点续传上传文件
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.UploadMes>
+     * @author : lijie
+     * @date :2021/11/9 10:18
+     * Update By lijie 2021/11/9 10:18
      */
-    @PostMapping("update")
-    CommonResult<FileInfo> update(@RequestBody FileInfo fileInfo);
+    @PostMapping("/composeFile")
+    CommonResult<UploadMes> composeFile(@RequestParam("groupCode") String groupCode,
+                                        @RequestParam("projectId") String projectId,
+                                        @RequestParam("appId") String appId,
+                                        @RequestParam("userId") String userId,
+                                        @RequestBody FileRequestData requestData);
 
-    /**
-     * 删除文件信息
-     * @param id 文件信息
-     * @return 文件信息
-     */
-    @PostMapping("delete")
-    CommonResult<String> delete(@RequestBody String id);
 
-    /**
-     * 查询文件信息
-     * @param id 文件信息
-     * @return 文件信息
+
+    /***
+     * Description: 获取文件上传信息
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.UploadMes>  
+     * @author : lijie
+     * @date :2021/11/9 10:18
+     * Update By lijie 2021/11/9 10:18
      */
-    @PostMapping("load")
-    CommonResult<FileInfo> load(@RequestBody String id);
-    /**
-     * 查询文件信息
-     * @param id 文件信息
-     * @return 文件信息
+    @PostMapping("/initSingleUpload")
+    CommonResult<UploadMes> initSingleUpload(@RequestParam("groupCode") String groupCode,
+                                             @RequestParam("projectId") String projectId,
+                                             @RequestParam("appId") String appId,
+                                             @RequestParam("userId") String userId,
+                                             @RequestBody FileRequestData requestData);
+
+    /***
+     * Description: 获取文件下载信息
+     * @param requestData : 请求信息
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.persagy.dmp.file.model.FileInfo>
+     * @author : lijie
+     * @date :2021/11/9 10:17
+     * Update By lijie 2021/11/9 10:17
      */
-    @PostMapping("queryByFileMd5")
-    CommonResult<List<FileInfo>> queryByFileMd5(@RequestBody String id);
+    @PostMapping("/initFileDownload")
+    CommonResult<FileInfo> initFileDownload(@RequestParam("groupCode") String groupCode,
+                                            @RequestParam("projectId") String projectId,
+                                            @RequestParam("appId") String appId,
+                                            @RequestParam("userId") String userId,
+                                            @RequestBody FileRequestData requestData);
+
 }

+ 0 - 64
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileMd5Client.java

@@ -1,64 +0,0 @@
-package com.persagy.dmp.file.client;
-
-import com.persagy.dmp.common.model.response.CommonResult;
-import com.persagy.dmp.file.model.FileInfo;
-import com.persagy.dmp.file.model.FileMd5;
-import com.persagy.dmp.storage.config.FileFeignConfig;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-/**
- * 文件管理Client
- * @author Charlie Yu
- * @date 2021-05-15
- */
-@FeignClient(name = "dmp-file", configuration = FileFeignConfig.class,path = "/file/md5/",url = "${persagy.bdtp.file.service:}")
-public interface FileMd5Client {
-
-    /**
-     * 新增文件MD5信息
-     * @param fileMd5 文件MD5信息
-     * @return 文件MD5信息
-     */
-    @PostMapping("insert")
-    CommonResult<FileMd5> insert(@RequestBody FileMd5 fileMd5);
-
-    /**
-     * 修改文件MD5信息
-     * @param fileMd5 MD5信息
-     * @return MD5信息
-     */
-    @PostMapping("update")
-    CommonResult<FileMd5> update(@RequestBody FileMd5 fileMd5);
-
-    /**
-     * 删除文件MD5信息
-     * @param id 文件MD5信息
-     * @return 文件MD5信息
-     */
-    @PostMapping("delete")
-    CommonResult<String> delete(@RequestBody String id);
-
-    /**
-     * 查询文件MD5信息
-     * @param id 文件MD5信息
-     * @return 文件MD5信息
-     */
-    @PostMapping("load")
-    CommonResult<FileMd5> load(@RequestBody String id);
-    /**
-     * 查询文件MD5信息
-     * @param md5 文件的md5
-     * @return 文件MD5信息
-     */
-    @PostMapping("loadByMd5")
-    CommonResult<FileMd5> loadByMd5(@RequestBody String md5);
-    /**
-     * 查询文件MD5信息
-     * @param fileMd5 文件的md5
-     * @return 文件MD5信息
-     */
-    @PostMapping("ensureFilePath")
-    CommonResult<FileMd5> ensureFilePath(@RequestBody FileMd5 fileMd5);
-}

+ 0 - 82
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/client/FileMd5ClientFacade.java

@@ -1,82 +0,0 @@
-package com.persagy.dmp.file.client;
-
-import cn.hutool.extra.spring.SpringUtil;
-import com.persagy.dmp.common.model.response.CommonResult;
-import com.persagy.dmp.common.utils.ResultHelper;
-import com.persagy.dmp.file.model.FileInfo;
-import com.persagy.dmp.file.model.FileMd5;
-
-/**
- * 文件管理Client门面
- * @author Charlie Yu
- * @date 2021-05-15
- */
-public class FileMd5ClientFacade {
-
-    private static FileMd5Client client = SpringUtil.getBean(FileMd5Client.class);
-
-    /**
-     * 新增
-     * @param fileMd5
-     * @return
-     */
-    public static FileMd5 insert(FileMd5 fileMd5) {
-        CommonResult<FileMd5> result = client.insert(fileMd5);
-        return ResultHelper.getContent(result);
-    }
-
-    /**
-     * 修改
-     * @param fileMd5
-     * @return
-     */
-    public static FileMd5 update(FileMd5 fileMd5) {
-        CommonResult<FileMd5> result = client.update(fileMd5);
-        return ResultHelper.getContent(result);
-    }
-
-    /**
-     * 删除
-     * @param fileId
-     */
-    public static void delete(String fileId) {
-        CommonResult<String> result = client.delete(fileId);
-        ResultHelper.getContent(result);
-    }
-
-    /**
-     * 查询
-     * @param fileId
-     * @return
-     */
-    public static FileMd5 load(String fileId) {
-        CommonResult<FileMd5> result = client.load(fileId);
-        return ResultHelper.getContent(result);
-    }
-    /**
-     * 查询
-     * @param fileMd5
-     * @return
-     */
-    public static FileMd5 loadByMd5(String fileMd5) {
-        CommonResult<FileMd5> result = client.loadByMd5(fileMd5);
-        return ResultHelper.getContent(result);
-    }
-    /**
-     * 查询
-     * @param fileMd5
-     * @return
-     */
-    public static CommonResult<FileMd5> loadByMd5Prototype(String fileMd5) {
-        return client.loadByMd5(fileMd5);
-    }
-    /**
-     * 查询
-     * @param fileMd5:文件MD5信息
-     * @return
-     */
-    public static FileMd5 ensureFilePath(FileMd5 fileMd5) {
-        CommonResult<FileMd5> result = client.ensureFilePath(fileMd5);
-        return ResultHelper.getContent(result);
-    }
-}

+ 1 - 1
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/constant/FileCommonConst.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.storage.constant;
+package com.persagy.dmp.file.constant;
 
 /**
  * 文件管理常量

+ 1 - 3
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/model/FileInfoCreator.java

@@ -5,9 +5,7 @@ import cn.hutool.core.util.ReUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.lang.PsDate;
-import com.persagy.dmp.storage.constant.FileCommonConst;
-
-import java.util.Date;
+import com.persagy.dmp.file.constant.FileCommonConst;
 
 /**
  * 文件信息组装器

+ 0 - 5
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/file/model/FileMd5Creator.java

@@ -1,12 +1,7 @@
 package com.persagy.dmp.file.model;
 
 import cn.hutool.core.io.file.FileNameUtil;
-import cn.hutool.core.util.ReUtil;
-import cn.hutool.core.util.StrUtil;
-import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.lang.PsDate;
-import com.persagy.dmp.storage.constant.FileCommonConst;
-
 /***
  * Description: 文件信息组装器
  * @author : lijie

+ 1 - 2
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/FileRequestData.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.file.domain;
+package com.persagy.dmp.file.model;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.persagy.dmp.common.lang.PsDate;
@@ -6,7 +6,6 @@ import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
-import java.util.Date;
 
 /***
  * Description: 文件请求参数

+ 1 - 1
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/UploadMes.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.file.domain;
+package com.persagy.dmp.file.model;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 1 - 1
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/domain/UploadSubMes.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.file.domain;
+package com.persagy.dmp.file.model;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 0 - 224
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/utils/FileStorageHelper.java

@@ -1,224 +0,0 @@
-package com.persagy.dmp.storage.utils;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.NumberUtil;
-import cn.hutool.crypto.digest.DigestUtil;
-import com.persagy.dmp.common.constant.ResponseCode;
-import com.persagy.dmp.common.exception.BusinessException;
-import com.persagy.dmp.file.client.FileClientFacade;
-import com.persagy.dmp.file.client.FileMd5ClientFacade;
-import com.persagy.dmp.file.model.FileInfo;
-import com.persagy.dmp.file.model.FileInfoCreator;
-import com.persagy.dmp.file.model.FileMd5;
-import com.persagy.dmp.file.model.FileMd5Creator;
-import com.persagy.dmp.storage.constant.FileCommonConst;
-import com.persagy.dmp.storage.service.FileStorageFactory;
-import com.sun.corba.se.impl.encoding.WrapperInputStream;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.IOUtils;
-import org.springframework.util.StreamUtils;
-
-import java.io.*;
-import java.util.List;
-
-/**
- * 文件存储助手
- * @author Charlie Yu
- * @date 2021-05-15
- */
-@Slf4j
-public class FileStorageHelper {
-
-    /**
-     * 上传文件
-     * @param fileInfo
-     * @param in
-     * @return
-     */
-    public static String uploadFile(FileInfo fileInfo, InputStream in) {
-        // 1.获得文件大小
-        byte[] streamBytes = getStreamBytes(in);
-        fileInfo.setFileSize((long) streamBytes.length);
-        // 2.获得文件的md5值
-        String fileMd5Str = DigestUtil.md5Hex(streamBytes);
-        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileMd5Str);
-        // 3.创建新的存储的fileInfo
-        FileInfo saveFileInfo = FileInfoCreator.of(fileInfo.getGroupCode(),fileInfo.getFileName(),
-                fileInfo.getBusinessId(), fileMd5Str, fileInfo.getExpireDate());
-        // 4.如果文件MD5信息已存在,则直接保存文件信息即可.秒传
-        saveFileInfo = FileClientFacade.insert(saveFileInfo);
-        if (null!=fileMd5
-                && FileCommonConst.UPLOAD_SUCCESS.equals(fileMd5.getUploadStatus())){
-            return saveFileInfo.getId();
-        }
-        if (null!=fileMd5
-                && FileCommonConst.UPLOAD_PART.equals(fileMd5.getUploadStatus())){
-            // 5.文件为断点续传,更改MD5文件信息的文件状态
-            fileMd5.setFileSize(fileInfo.getFileSize());
-            fileMd5.setFileBucket(fileInfo.getFileBucket());
-            fileMd5.setUploadStatus(FileCommonConst.UPLOAD_SUCCESS);
-            fileMd5.setFileName(fileInfo.getFileName());
-            fileMd5.setGroupCode(fileInfo.getGroupCode());
-            fileMd5=FileMd5ClientFacade.ensureFilePath(fileMd5);
-            FileMd5ClientFacade.update(fileMd5);
-        }else {
-            // 6.没上传过,新建MD5文件信息
-            fileMd5 = FileMd5Creator.of(fileInfo.getFileBucket(), fileMd5Str, FileCommonConst.UPLOAD_SUCCESS);
-            fileMd5.setFileName(fileInfo.getFileName());
-            fileMd5.setGroupCode(fileInfo.getGroupCode());
-            fileMd5.setFileSize(fileInfo.getFileSize());
-            fileMd5 = FileMd5ClientFacade.insert(fileMd5);
-        }
-        FileStorageFactory.getService().upload(fileMd5.getFileBucket(), fileMd5.getFilePath(), IoUtil.toStream(streamBytes));
-        return saveFileInfo.getId();
-    }
-    /***
-     * Description: 读取流的字节数组
-     * @param stream : 流
-     * @return : byte[]
-     * @author : lijie
-     * @date :2021/10/23 12:22
-     * Update By lijie 2021/10/23 12:22
-     */
-    private static byte[] getStreamBytes(InputStream stream) {
-        return IoUtil.readBytes(stream);
-    }
-
-    /**
-     * 上传图片
-     * @param fileInfo
-     * @param in
-     * @return
-     */
-    public static String uploadImage(FileInfo fileInfo, InputStream in) {
-        // 图片压缩
-        InputStream cutIn = ImageHelper.cutImage(in);
-        return uploadFile(fileInfo, cutIn);
-    }
-
-    /**
-     * 修改文件
-     * @param fileId
-     * @param fileName
-     * @param in
-     * @return
-     */
-    public static String replaceFile(String fileId, String fileName, InputStream in) {
-        FileInfo fileInfo = FileClientFacade.load(fileId);
-        byte[] streamBytes = getStreamBytes(in);
-        // 1.判断文件是否已存在,如果已存在则更新文件信息关联的MD5值即可,秒传
-        String fileMd5Str = DigestUtil.md5Hex(streamBytes);
-        FileMd5 newFileMd5 = FileMd5ClientFacade.loadByMd5(fileMd5Str);
-        if (null!=newFileMd5){
-            fileInfo.setFileMd5(fileMd5Str);
-            fileInfo.setFileName(fileName);
-            FileClientFacade.update(fileInfo);
-            return fileInfo.getId();
-        }
-        // 2.判断md5关联的文件信息是否只有当前一个,如果只有一个则删除历史文件
-        List<FileInfo> fileInfos = FileClientFacade.queryByFileMd5(fileInfo.getFileMd5());
-        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
-        if (CollUtil.isNotEmpty(fileInfos) && fileInfos.size()==1){
-            // 删除MD5文件信息
-            FileMd5ClientFacade.delete(fileMd5.getId());
-            // 删除文件
-            FileStorageFactory.getService().delete(fileMd5.getFileBucket(), fileMd5.getFilePath());
-        }
-        // 3.更新文件信息,然后重新上传文件
-        FileMd5 uploadFileMd5 = FileMd5Creator.of(fileMd5.getFileBucket(), fileMd5Str, FileCommonConst.UPLOAD_SUCCESS);
-        uploadFileMd5.setFileName(fileName);
-        uploadFileMd5.setGroupCode(fileInfo.getGroupCode());
-        uploadFileMd5.setFileSize((long) streamBytes.length);
-        uploadFileMd5 = FileMd5ClientFacade.insert(uploadFileMd5);
-        fileInfo.setFileMd5(fileMd5Str);
-        fileInfo.setFileName(fileName);
-        FileClientFacade.update(fileInfo);
-        FileStorageFactory.getService().upload(uploadFileMd5.getFileBucket(), uploadFileMd5.getFilePath(),
-                IoUtil.toStream(streamBytes));
-        return fileInfo.getId();
-    }
-
-    /**
-     * 更新图片
-     * @param fileId
-     * @param fileName
-     * @param in
-     * @return
-     */
-    public static String replaceImage(String fileId, String fileName, InputStream in) {
-        // 图片压缩
-        InputStream cutIn = ImageHelper.cutImage(in);
-        return replaceFile(fileId, fileName, cutIn);
-    }
-
-    /**
-     * 删除文件及图片
-     * @param fileId
-     */
-    public static void deleteFile(String fileId) {
-        FileInfo fileInfo = FileClientFacade.load(fileId);
-        List<FileInfo> fileInfos = FileClientFacade.queryByFileMd5(fileInfo.getFileMd5());
-        if (CollUtil.isNotEmpty(fileInfos) && fileInfos.size()>1){
-            // 多余一个绑定到相同的md5文件上,仅删除文件信息即可
-            FileClientFacade.delete(fileId);
-            return;
-        }
-        // 只有一个绑定到相同的md5文件上,删除文件信息,文件MD5信息,文件信息
-        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
-        FileClientFacade.delete(fileId);
-        FileMd5ClientFacade.delete(fileMd5.getId());
-        FileStorageFactory.getService().delete(fileMd5.getFileBucket(), fileMd5.getFilePath());
-    }
-
-    /**
-     * 下载
-     * @param fileId 文件id
-     * @return 文件下载地址
-     */
-    public static FileInfo downloadUrl(String fileId) {
-        FileInfo fileInfo = FileClientFacade.load(fileId);
-        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
-        if (null!=fileMd5){
-            String fetchUrl = FileStorageFactory.getService().fetchUrl(fileMd5.getFileBucket(), fileMd5.getFilePath());
-            fileInfo.setFileDownloadUrl(fetchUrl);
-        }
-        return fileInfo;
-    }
-
-    /**
-     * 下载
-     * @param fileId 文件id
-     * @return 文件流
-     */
-    public static InputStream downloadStream(String fileId) {
-        FileInfo fileInfo = FileClientFacade.load(fileId);
-        FileMd5 fileMd5 = FileMd5ClientFacade.loadByMd5(fileInfo.getFileMd5());
-        return FileStorageFactory.getService().download(fileMd5.getFileBucket(), fileMd5.getFilePath());
-    }
-
-    /**
-     * 下载
-     * @param fileId 文件id
-     * @return 文件内容
-     */
-    public static byte[] downloadContent(String fileId) {
-        // TODO 暂不提供,依赖前端显示规则
-        return null;
-    }
-
-    /**
-     * 获取文件大小
-     * @param stream
-     * @return
-     */
-//    private static Long getStreamSize(InputStream stream) {
-//        try {
-//            return Long.valueOf(stream.available());
-//        } catch (IOException e) {
-//            log.error(e.getMessage(), e);
-//            throw new BusinessException("文件上传失败!");
-//        }
-//    }
-}

+ 0 - 2
dmp-comp/pom.xml

@@ -19,8 +19,6 @@
         <module>dmp-digital-starter</module>
         <module>dmp-amqp-starter</module>
         <module>dmp-auth</module>
-        <module>dmp-file-hdfs-starter</module>
-        <module>dmp-file-minio-starter</module>
     </modules>
 
 </project>