Prechádzať zdrojové kódy

获得专利附图的guid

lwhhszx 1 rok pred
rodič
commit
e5096614fa

+ 1 - 0
src/main/java/com/example/fms/common/model/dto/UploadChuckDTO.java

@@ -9,4 +9,5 @@ public class UploadChuckDTO {
     private Long fileLength;
     private Integer totalNum;
     private String md5;
+    private Integer sourceId;
 }

+ 2 - 0
src/main/java/com/example/fms/common/model/vo/UploadChuckVO.java

@@ -9,4 +9,6 @@ public class UploadChuckVO {
     private Integer totalNum;
     private String orginName;
     private String exrName;
+    private Integer sourceId;
+    private String filePath;
 }

+ 2 - 2
src/main/java/com/example/fms/common/utils/FileUtils.java

@@ -422,9 +422,9 @@ public class FileUtils {
         return exrName;
     }
 
-    public static String getFilePath(String path) {
+    public static String getDateFilePath(String path) {
         String directoryName = FileUtils.getDateDirectoryName();
-        String rePath = path + directoryName;
+        String rePath = path + directoryName+"/";
         return rePath;
     }
 

+ 13 - 2
src/main/java/com/example/fms/controller/FileMangerController.java

@@ -206,8 +206,12 @@ public class FileMangerController {
     @PostMapping("/merge")
     @Operation(summary = "合并分片")
     public String uploadChunksMerge(String md5, String fileName)  throws Exception{
-      fileManagerService.uploadChunksMerge(md5,fileName);
-        return Response.success("saveUrl");
+     List<String> GUIDs= fileManagerService.uploadChunksMerge(md5);
+        if(GUIDs != null && GUIDs.size() != 0){
+            return Response.success(GUIDs);
+        } else {
+            return Response.error("文件信息入表失败");
+        }
     }
 
     @PostMapping("/startChunks")
@@ -217,4 +221,11 @@ public class FileMangerController {
         return Response.success(flag);
     }
 
+
+    @PostMapping("/cancelChunks")
+    @Operation(summary = "取消上传分片")
+    public String cancelChunks(String md5) throws Exception {
+        Boolean flag =   fileManagerService.cancelChunks(md5);
+        return Response.success(flag);
+    }
 }

+ 19 - 1
src/main/java/com/example/fms/service/FileChuckService.java

@@ -5,17 +5,22 @@ import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.example.fms.common.core.base.RedisConf;
 import com.example.fms.common.model.dto.UploadChuckDTO;
+import com.example.fms.common.model.vo.ConfigSettingVO;
 import com.example.fms.common.model.vo.UploadChuckVO;
+import com.example.fms.common.utils.ExcuteConfigUtils;
 import com.example.fms.common.utils.FileUtils;
 import com.example.fms.common.utils.JsonUtils;
 import com.example.fms.common.utils.RedisUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 @RequiredArgsConstructor
 public class FileChuckService {
     private final RedisUtil redisUtil;
+
     public Boolean startChunks(UploadChuckDTO uploadChuckDTO) {
         String md5 = uploadChuckDTO.getMd5();
         if (md5 == null) {
@@ -24,9 +29,18 @@ public class FileChuckService {
         UploadChuckVO uploadChuckVO = new UploadChuckVO();
         uploadChuckVO.setOrginName(uploadChuckDTO.getFileName());
         String exrName = FileUtil.extName(uploadChuckDTO.getFileName());
-        String fileName = IdUtil.simpleUUID()+"."+exrName;
+        String fileName = IdUtil.simpleUUID() + "." + exrName;
         uploadChuckVO.setFileName(fileName);
         uploadChuckVO.setExrName(exrName);
+        uploadChuckVO.setSourceId(uploadChuckDTO.getSourceId());
+
+
+        List<ConfigSettingVO> configSettingVOS = ExcuteConfigUtils.excuteConfigVO();
+        //2.根据传入id,获得配置类,根据配置类中的id去匹配sourceId来选择使用的上传方法
+        ConfigSettingVO configSettingVO = configSettingVOS.stream().filter(item -> item.getId().equals(uploadChuckVO.getSourceId())).findFirst().orElse(null);
+        String filePath = FileUtils.getDateFilePath(configSettingVO.getFilePath());
+        uploadChuckVO.setFilePath(filePath);
+
         String key = this.getTemFileMessageKey(uploadChuckDTO.getMd5());
         String jsons = JSONObject.toJSONString(uploadChuckVO);
         redisUtil.set(key, jsons);
@@ -48,4 +62,8 @@ public class FileChuckService {
         return uploadChuckVO;
     }
 
+    public void removeTemFileMessage(String md5) {
+        String key = this.getTemFileMessageKey(md5);
+      redisUtil.delete(key);
+    }
 }

+ 41 - 10
src/main/java/com/example/fms/service/FileMangerService.java

@@ -47,6 +47,7 @@ public class FileMangerService {
     private final FileUtils fileUtils;
     private final OssService ossService;
     private final RedisUtil redisUtil;
+    private final FileChuckService fileChuckService;
 
     /**
      * 上传文件的最外部接口
@@ -241,10 +242,7 @@ public class FileMangerService {
 
 
     public void uploadChunks(MultipartFile file, String md5, Integer index) throws Exception {
-        //1.调用解析配置方法,获取配置信息
-        List<ConfigSettingVO> configSettingVOS = ExcuteConfigUtils.excuteConfigVO();
         //2.根据传入id,获得配置类,根据配置类中的id去匹配sourceId来选择使用的上传方法
-        ConfigSettingVO configSettingVO = configSettingVOS.stream().filter(item -> item.getId().equals(5)).findFirst().orElse(null);
         String tempPath = fileUtils.getTempPath(md5);
         File tempDirectory = new File(tempPath);
         if (!tempDirectory.exists()) {
@@ -253,19 +251,52 @@ public class FileMangerService {
         String savePath = tempPath + FileUtils.FILE_SEPARATOR + md5 + "-" + index;
         File temFile = new File(savePath);
         file.transferTo(temFile);
-        ossService.uploadChucks(temFile, configSettingVO, index, md5);
+        ossService.uploadChucks(temFile, index, md5);
     }
 
-    public void uploadChunksMerge(String md5, String name) throws Exception {
-        //1.调用解析配置方法,获取配置信息
-        List<ConfigSettingVO> configSettingVOS = ExcuteConfigUtils.excuteConfigVO();
-        //2.根据传入id,获得配置类,根据配置类中的id去匹配sourceId来选择使用的上传方法
-        ConfigSettingVO configSettingVO = configSettingVOS.stream().filter(item -> item.getId().equals(5)).findFirst().orElse(null);
-        ossService.uploadChunksMerge(configSettingVO, md5);
+    public List<String> uploadChunksMerge(String md5) throws Exception {
 
+        //上传分片
+        ossService.uploadChunksMerge(md5);
+        //删除分片文件
+        this.deleteTmFileDirectory(md5);
+        //保存文件记录
+        List<String> guids = this.saveSystemFileByMd5(md5);
+        //删除redis信息
+        fileChuckService.removeTemFileMessage(md5);
+        return guids;
     }
 
+    private void deleteTmFileDirectory(String md5) {
+        String tempPath = fileUtils.getTempPath(md5);
+        File tempDirectory = new File(tempPath);
+        try {
+            FileUtils.deleteDirectory(tempDirectory);
 
+        } catch (Exception e) {
+        }
+    }
 
+    public List<String> saveSystemFileByMd5(String md5) {
+        UploadChuckVO uploadChuckVO = fileChuckService.getTemFileMessage(md5);
+        Integer sourceId = uploadChuckVO.getSourceId();
+        SystemFileDTO systemFileDTO = new SystemFileDTO();
+        systemFileDTO.setFilePath(uploadChuckVO.getFilePath() + uploadChuckVO.getFileName());
+        systemFileDTO.setPType(sourceId);
+        systemFileDTO.setFileName(uploadChuckVO.getFileName());
+        if (uploadChuckVO.getFileLength() != null) {
+            systemFileDTO.setFileLength(uploadChuckVO.getFileLength().toString());
+        }
+        systemFileDTO.setOriginalName(uploadChuckVO.getOrginName());
+        List<SystemFileDTO> systemFileDTOS = new ArrayList<>();
+        systemFileDTOS.add(systemFileDTO);
+        List<String> guids = systemFileService.add(systemFileDTOS, sourceId);
+        return guids;
+    }
 
+    public Boolean cancelChunks(String md5) {
+        this.deleteTmFileDirectory(md5);
+        ossService.removeRedisKey(md5);
+        return true;
+    }
 }

+ 19 - 10
src/main/java/com/example/fms/service/OssService.java

@@ -12,6 +12,7 @@ import com.example.fms.common.model.dto.DownloadSysFileDTO;
 import com.example.fms.common.model.dto.SystemFileDTO;
 import com.example.fms.common.model.vo.ConfigSettingVO;
 import com.example.fms.common.model.vo.UploadChuckVO;
+import com.example.fms.common.utils.ExcuteConfigUtils;
 import com.example.fms.common.utils.FileUtils;
 import com.example.fms.common.utils.JsonUtils;
 import com.example.fms.common.utils.RedisUtil;
@@ -36,6 +37,7 @@ public class OssService {
     private final FileUtils fileUtils;
     private final RedisUtil redisUtil;
     private final FileChuckService fileChuckService;
+
     //创建桶
     public void createBucket() throws Exception {
         // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
@@ -292,8 +294,11 @@ public class OssService {
     }
 
 
-    public void uploadChucks(File file, ConfigSettingVO configSettingVO, Integer index, String md5) throws Exception {
+    public void uploadChucks(File file, Integer index, String md5) throws Exception {
         UploadChuckVO uploadChuckVO = fileChuckService.getTemFileMessage(md5);
+        List<ConfigSettingVO> configSettingVOS = ExcuteConfigUtils.excuteConfigVO();
+        //2.根据传入id,获得配置类,根据配置类中的id去匹配sourceId来选择使用的上传方法
+        ConfigSettingVO configSettingVO = configSettingVOS.stream().filter(item -> item.getId().equals(uploadChuckVO.getSourceId())).findFirst().orElse(null);
         // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
         String endpoint = configSettingVO.getEndPoint();
         // 填写Bucket名称,例如examplebucket。
@@ -302,7 +307,7 @@ public class OssService {
         String accessKeyId = configSettingVO.getAccessKeyId();
         String accessKeySecret = configSettingVO.getAccessKeySecret();
         // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
-        String objectName = uploadChuckVO.getFileName();
+        String objectName = uploadChuckVO.getFilePath() + uploadChuckVO.getFileName();
         // 创建OSSClient实例。
         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
 
@@ -367,6 +372,7 @@ public class OssService {
     }
 
     public String getPartETagRedisKey(String md5) {
+
         String key = RedisConf.OSS_PART_TAG + RedisConf.SYMBOL_COLON + md5;
         return key;
     }
@@ -388,7 +394,7 @@ public class OssService {
         String key = this.getPartETagRedisKey(md5);
         String json = redisUtil.get(key);
         if (json != null) {
-            partETags = JsonUtils.jsonToList(json, PartETag.class);
+            partETags = JSONArray.parseArray(json, PartETag.class);
         }
         partETags.add(partETag);
         String jsons = JSONObject.toJSONString(partETags);
@@ -396,12 +402,15 @@ public class OssService {
         return partETags;
     }
 
-    public void uploadChunksMerge(ConfigSettingVO configSettingVO, String md5) throws Exception {
+    public void uploadChunksMerge(String md5) throws Exception {
         UploadChuckVO uploadChuckVO = fileChuckService.getTemFileMessage(md5);
+        List<ConfigSettingVO> configSettingVOS = ExcuteConfigUtils.excuteConfigVO();
+        //2.根据传入id,获得配置类,根据配置类中的id去匹配sourceId来选择使用的上传方法
+        ConfigSettingVO configSettingVO = configSettingVOS.stream().filter(item -> item.getId().equals(uploadChuckVO.getSourceId())).findFirst().orElse(null);
         OSS ossClient = this.getOssClient(configSettingVO);
         String bucketName = configSettingVO.getBucketName();
         String uploadId = redisUtil.get(md5);
-        String objectName = uploadChuckVO.getFileName();
+        String objectName = uploadChuckVO.getFilePath() + uploadChuckVO.getFileName();
         List<PartETag> partETags = this.getPartETags(md5);
         // 创建CompleteMultipartUploadRequest对象。
         // 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
@@ -411,15 +420,15 @@ public class OssService {
         // 完成分片上传。
         CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
         System.out.println(completeMultipartUploadResult.getETag());
-
+        this.removeRedisKey(md5);
 
     }
 
 
-    public void removeRedisKey(String md5){
-        String key1 =md5;
-        String key2 =this.getPartETagRedisKey(md5);
-        List<String> keys =new ArrayList<>();
+    public void removeRedisKey(String md5) {
+        String key1 = md5;
+        String key2 = this.getPartETagRedisKey(md5);
+        List<String> keys = new ArrayList<>();
         keys.add(key1);
         keys.add(key2);
         redisUtil.delete(keys);

+ 2 - 2
src/main/resources/configSetting.json

@@ -38,8 +38,8 @@
   {
     "sourceId": "2",
     "sourceName": "OSS",
-    "id": 5,
-    "endPoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
+    "id": 6,
+    "endPoint": "https://oss-cn-shanghai.aliyuncs.com",
     "accessKeyId": "LTAI5tGyG1Q7fKprgg1nWhXj",
     "accessKeySecret": "Y6Erboh5lEFiRPR4XK8oCPMvUzYGLN",
     "bucketName": "xiaoshi-pas-syst",