Browse Source

多线程上传

gaodm 5 years atrás
parent
commit
58089588f5

+ 5 - 1
config-server/src/main/resources/shared/prec-service-local.yml

@@ -104,4 +104,8 @@ fastdfs:
   tracker_servers: 192.168.2.236:22122
 
 imageUrl:
-  prefix: http://192.168.2.236:82
+  prefix: http://192.168.2.236:82
+
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12

+ 5 - 0
prec-service/pom.xml

@@ -177,6 +177,11 @@
             <version>0.4.8</version>
         </dependency>
 
+        <dependency>
+            <groupId>io.github.lvyahui8</groupId>
+            <artifactId>spring-boot-data-aggregator-starter</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 102 - 0
prec-service/src/main/java/com/diagbot/aggregate/UploadAggregate.java

@@ -0,0 +1,102 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.FileThumDTO;
+import com.diagbot.facade.UploadFacade;
+import com.diagbot.util.ListUtil;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/11/1 9:15
+ */
+@Component
+public class UploadAggregate {
+    @Autowired
+    private UploadFacade uploadFacade;
+
+    @DataProvider("thumUploads")
+    public List<FileThumDTO> setAll(
+            @DataConsumer("thumUpload1") FileThumDTO fileThumDTO1,
+            @DataConsumer("thumUpload2") FileThumDTO fileThumDTO2,
+            @DataConsumer("thumUpload3") FileThumDTO fileThumDTO3,
+            @DataConsumer("thumUpload4") FileThumDTO fileThumDTO4,
+            @DataConsumer("thumUpload5") FileThumDTO fileThumDTO5,
+            @DataConsumer("thumUpload6") FileThumDTO fileThumDTO6) {
+        List<FileThumDTO> fileThumDTOList = ListUtil.newArrayList();
+        if (null != fileThumDTO1){
+            fileThumDTOList.add(fileThumDTO1);
+        }
+
+        if (null != fileThumDTO2){
+            fileThumDTOList.add(fileThumDTO2);
+        }
+
+        if (null != fileThumDTO3){
+            fileThumDTOList.add(fileThumDTO3);
+        }
+
+        if (null != fileThumDTO4){
+            fileThumDTOList.add(fileThumDTO4);
+        }
+
+        if (null != fileThumDTO5){
+            fileThumDTOList.add(fileThumDTO5);
+        }
+        if (null != fileThumDTO6){
+            fileThumDTOList.add(fileThumDTO6);
+        }
+
+        return fileThumDTOList;
+    }
+
+    @DataProvider("thumUpload1")
+    public FileThumDTO thumUpload1(@InvokeParameter("file1") MultipartFile file,
+                                   @InvokeParameter("type1") Integer type) {
+        return this.singleFileThumUpload(file, type);
+    }
+
+    @DataProvider("thumUpload2")
+    public FileThumDTO thumUpload2(@InvokeParameter("file2") MultipartFile file,
+                                   @InvokeParameter("type2") Integer type) {
+        return this.singleFileThumUpload(file, type);
+    }
+
+    @DataProvider("thumUpload3")
+    public FileThumDTO thumUpload3(@InvokeParameter("file3") MultipartFile file,
+                                   @InvokeParameter("type3") Integer type) {
+        return this.singleFileThumUpload(file, type);
+    }
+
+    @DataProvider("thumUpload4")
+    public FileThumDTO thumUpload4(@InvokeParameter("file4") MultipartFile file,
+                                   @InvokeParameter("type4") Integer type) {
+        return this.singleFileThumUpload(file, type);
+    }
+
+    @DataProvider("thumUpload5")
+    public FileThumDTO thumUpload5(@InvokeParameter("file5") MultipartFile file,
+                                   @InvokeParameter("type5") Integer type) {
+        return this.singleFileThumUpload(file, type);
+    }
+
+    @DataProvider("thumUpload6")
+    public FileThumDTO thumUpload6(@InvokeParameter("file6") MultipartFile file,
+                                   @InvokeParameter("type6") Integer type) {
+        return this.singleFileThumUpload(file, type);
+    }
+
+    private FileThumDTO singleFileThumUpload(MultipartFile file, Integer type) {
+        if (file == null) {
+            return null;
+        }
+        return uploadFacade.singleFileThumUpload2(file, type);
+    }
+}

+ 6 - 0
prec-service/src/main/java/com/diagbot/service/UploadService.java

@@ -23,4 +23,10 @@ public interface UploadService {
 
     //多文件上传同时生成缩略图
     List<FileThumDTO> multiFileThumUpload(MultipartFile[] mpfs, Integer[] type);
+
+    //多文件上传同时生成缩略图(多线程)
+    List<FileThumDTO> multiFileThumUpload2(MultipartFile[] mpfs, Integer[] type);
+
+    //单文件上传同时生成缩略图
+    FileThumDTO singleFileThumUpload2(MultipartFile file, Integer type);
 }

+ 56 - 1
prec-service/src/main/java/com/diagbot/service/impl/UploadServiceImpl.java

@@ -7,8 +7,10 @@ import com.diagbot.dto.FileThumDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.UploadService;
+import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import lombok.extern.slf4j.Slf4j;
 import net.coobird.thumbnailator.Thumbnails;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -17,7 +19,9 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 文件上传服务接口实现
@@ -27,6 +31,9 @@ import java.util.List;
 @Slf4j
 @Service
 public class UploadServiceImpl implements UploadService {
+    @Autowired
+    private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
+
     @Override
     public FileDTO singleFileUpload(MultipartFile file) {
         if (file.isEmpty()) {
@@ -46,7 +53,7 @@ public class UploadServiceImpl implements UploadService {
     }
 
     @Override
-    public FileThumDTO singleFileThumUpload(MultipartFile file){
+    public FileThumDTO singleFileThumUpload(MultipartFile file) {
         FileThumDTO fileThumDTO = new FileThumDTO();
         if (file.isEmpty()) {
             fileThumDTO.setSource(new FileDTO("FAILURE", "文件不能为空"));
@@ -138,6 +145,54 @@ public class UploadServiceImpl implements UploadService {
         return fileDTOS;
     }
 
+    @Override
+    public List<FileThumDTO> multiFileThumUpload2(MultipartFile[] mpfs, Integer[] type) {
+        // 上传文件返回的路径集合
+        List<FileThumDTO> fileDTOS = new ArrayList<>();
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            for (int i = 0; i < 6; i++) {
+                int j = i + 1;
+                String fileName = "file" + j;
+                String typeName = "type" + j;
+                if (null != mpfs && null != type) {
+                    if (i < mpfs.length && i < type.length
+                            && null != mpfs[i] && null != type[i]) {
+                        invokeParams.put(fileName, mpfs[i]);
+                        invokeParams.put(typeName, type[i]);
+                    }
+                }
+            }
+            fileDTOS
+                    = dataBeanAggregateQueryFacade.get("thumUploads", invokeParams, List.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
+        }
+        return fileDTOS;
+    }
+
+    @Override
+    public FileThumDTO singleFileThumUpload2(MultipartFile file, Integer type) {
+        FileThumDTO fileThumDTO = new FileThumDTO();
+        if (file.isEmpty()) {
+            fileThumDTO.setSource(new FileDTO("FAILURE", "文件不能为空", type));
+            return fileThumDTO;
+        }
+        //文件大小上限4M
+        if (file.getSize() > 4 * 1024 * 1024) {
+            fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,超出大小限制4MB", type));
+            return fileThumDTO;
+        }
+        try {
+            fileThumDTO = saveFileWithThum(file);
+            return fileThumDTO;
+        } catch (Exception e) {
+            log.error("文件上传失败", e);
+            fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,请重新上传", type));
+            return fileThumDTO;
+        }
+    }
+
     /**
      * @param multipartFile
      * @return

+ 23 - 0
prec-service/src/main/java/com/diagbot/web/UploadController.java

@@ -99,6 +99,29 @@ public class UploadController {
         }
     }
 
+    @ApiOperation(value = "智能预问诊-多个文件上传同时生成缩略图")
+    @CrossOrigin(allowCredentials = "true", allowedHeaders = "*", methods = { RequestMethod.POST }, origins = "*")
+    @PostMapping(value = "/uploadImageThums2", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public RespDTO<List<FileThumDTO>> multiFileThumUpload2(@RequestParam("upfiles") MultipartFile[] file, @RequestParam("type") Integer[] type) {
+        List<FileThumDTO> data = uploadFacade.multiFileThumUpload2(file, type);
+        String msg = "";
+        if (ListUtil.isNotEmpty(data)) {
+            for (int i = 0; i < data.size(); i++) {
+                if (data.get(i).getSource() != null && data.get(i).getSource().getState().equals("FAILURE")) {
+                    msg += "第【" + (i + 1) + "】张图片上传失败," + data.get(i).getSource().getInfo() + ";";
+                }
+                if (data.get(i).getThumbnail() != null && data.get(i).getThumbnail().getState().equals("FAILURE")) {
+                    msg += "第【" + (i + 1) + "】张图片缩略图上传失败," + data.get(i).getThumbnail().getInfo() + ";";
+                }
+            }
+        }
+        if (StringUtil.isNotBlank(msg)) {
+            return RespDTO.onError(msg);
+        } else {
+            return RespDTO.onSuc(data);
+        }
+    }
+
     @PostMapping("/deleteRemoteFile")
     @ApiOperation(value = "智能预问诊-文件删除")
     public String deleteRemoteFile(@RequestParam("path") String path) {