Explorar el Código

3.3.1 自动升级

xiaofei hace 1 año
padre
commit
e854b1de84
Se han modificado 14 ficheros con 385 adiciones y 30 borrados
  1. 29 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/Mainfest.java
  2. 21 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/MainfestApp.java
  3. 30 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/MainfestScript.java
  4. 13 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/result/ClientInstallResult.java
  5. 31 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/result/ClientResult.java
  6. 40 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/result/ClientUpgradeResult.java
  7. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ClientUpgrade.java
  8. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ClientUpgradeService.java
  9. 89 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientUpgradeServiceImpl.java
  10. 5 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/admin/ClientUpgradeController.java
  11. 1 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanLogController.java
  12. 11 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/FileUploadService.java
  13. 73 10
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/FileUploadServiceImpl.java
  14. 28 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileStoreUtil.java

+ 29 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/Mainfest.java

@@ -1,11 +1,16 @@
 package com.qmth.distributed.print.business.bean.upgrade;
 
+import java.util.List;
+
 public class Mainfest {
 
     private String version;
     private Integer build;
     private String platform;
     private Integer supportMin;
+    private List<MainfestApp> app;
+    private MainfestScript script;
+    private List<String> data;
 
     public String getVersion() {
         return version;
@@ -38,4 +43,28 @@ public class Mainfest {
     public void setSupportMin(Integer supportMin) {
         this.supportMin = supportMin;
     }
+
+    public List<MainfestApp> getApp() {
+        return app;
+    }
+
+    public void setApp(List<MainfestApp> app) {
+        this.app = app;
+    }
+
+    public MainfestScript getScript() {
+        return script;
+    }
+
+    public void setScript(MainfestScript script) {
+        this.script = script;
+    }
+
+    public List<String> getData() {
+        return data;
+    }
+
+    public void setData(List<String> data) {
+        this.data = data;
+    }
 }

+ 21 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/MainfestApp.java

@@ -1,4 +1,25 @@
 package com.qmth.distributed.print.business.bean.upgrade;
 
+import java.util.List;
+
 public class MainfestApp {
+
+    private String name;
+    private String md5;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
 }

+ 30 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/MainfestScript.java

@@ -1,4 +1,34 @@
 package com.qmth.distributed.print.business.bean.upgrade;
 
+import java.util.List;
+
 public class MainfestScript {
+
+    private String before;
+    private String after;
+    private List<String> includes;
+
+    public String getBefore() {
+        return before;
+    }
+
+    public void setBefore(String before) {
+        this.before = before;
+    }
+
+    public String getAfter() {
+        return after;
+    }
+
+    public void setAfter(String after) {
+        this.after = after;
+    }
+
+    public List<String> getIncludes() {
+        return includes;
+    }
+
+    public void setIncludes(List<String> includes) {
+        this.includes = includes;
+    }
 }

+ 13 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/result/ClientInstallResult.java

@@ -0,0 +1,13 @@
+package com.qmth.distributed.print.business.bean.upgrade.result;
+
+public class ClientInstallResult {
+    private String url;
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+}

+ 31 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/result/ClientResult.java

@@ -0,0 +1,31 @@
+package com.qmth.distributed.print.business.bean.upgrade.result;
+
+public class ClientResult {
+    private String prefix;
+    private ClientInstallResult install;
+    private ClientUpgradeResult upgrade;
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public ClientInstallResult getInstall() {
+        return install;
+    }
+
+    public void setInstall(ClientInstallResult install) {
+        this.install = install;
+    }
+
+    public ClientUpgradeResult getUpgrade() {
+        return upgrade;
+    }
+
+    public void setUpgrade(ClientUpgradeResult upgrade) {
+        this.upgrade = upgrade;
+    }
+}

+ 40 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/upgrade/result/ClientUpgradeResult.java

@@ -0,0 +1,40 @@
+package com.qmth.distributed.print.business.bean.upgrade.result;
+
+public class ClientUpgradeResult {
+    private String version;
+    private Integer build;
+    private Integer supportMin;
+    private String index;
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public Integer getBuild() {
+        return build;
+    }
+
+    public void setBuild(Integer build) {
+        this.build = build;
+    }
+
+    public Integer getSupportMin() {
+        return supportMin;
+    }
+
+    public void setSupportMin(Integer supportMin) {
+        this.supportMin = supportMin;
+    }
+
+    public String getIndex() {
+        return index;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+}

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ClientUpgrade.java

@@ -41,6 +41,9 @@ public class ClientUpgrade implements Serializable {
     @ApiModelProperty(value = "升级包保存地址")
     private String upgradePath;
 
+    @ApiModelProperty(value = "mainfest.json保存地址")
+    private String mainfestPath;
+
     public ClientUpgrade() {
     }
 
@@ -96,6 +99,14 @@ public class ClientUpgrade implements Serializable {
         this.upgradePath = upgradePath;
     }
 
+    public String getMainfestPath() {
+        return mainfestPath;
+    }
+
+    public void setMainfestPath(String mainfestPath) {
+        this.mainfestPath = mainfestPath;
+    }
+
     @Override
     public String toString() {
         return "ClientUpgrade{" +

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ClientUpgradeService.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service;
 
+import com.qmth.distributed.print.business.bean.upgrade.result.ClientResult;
 import com.qmth.distributed.print.business.entity.ClientUpgrade;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.enums.clientpackage.ClientPackageEnum;
@@ -18,4 +19,6 @@ public interface ClientUpgradeService extends IService<ClientUpgrade> {
     void upload(MultipartFile file, String md5, ClientPackageEnum type);
 
     ClientUpgrade getByPlatform(String platform);
+
+    ClientResult getExternalByPlatform(String platform);
 }

+ 89 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientUpgradeServiceImpl.java

@@ -3,7 +3,14 @@ package com.qmth.distributed.print.business.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.tools.io.ZipReader;
+import com.qmth.boot.tools.io.ZipWriter;
 import com.qmth.distributed.print.business.bean.upgrade.Mainfest;
+import com.qmth.distributed.print.business.bean.upgrade.MainfestApp;
+import com.qmth.distributed.print.business.bean.upgrade.MainfestScript;
+import com.qmth.distributed.print.business.bean.upgrade.result.ClientInstallResult;
+import com.qmth.distributed.print.business.bean.upgrade.result.ClientResult;
+import com.qmth.distributed.print.business.bean.upgrade.result.ClientUpgradeResult;
 import com.qmth.distributed.print.business.entity.ClientUpgrade;
 import com.qmth.distributed.print.business.mapper.ClientUpgradeMapper;
 import com.qmth.distributed.print.business.service.ClientUpgradeService;
@@ -13,9 +20,9 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.enums.clientpackage.ClientPackageEnum;
 import com.qmth.teachcloud.common.service.FileUploadService;
+import com.qmth.teachcloud.common.util.FileUtil;
 import com.qmth.teachcloud.common.util.Zip4jUtil;
 import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -49,13 +56,14 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
 
     @Override
     public void upload(MultipartFile file, String md5, ClientPackageEnum type) {
+        File parentDirVar = null;
         try {
-            String fileName = FilenameUtils.getBaseName(file.getOriginalFilename());
+            String fileName = FilenameUtils.getName(file.getOriginalFilename());
 
-            if (ClientPackageEnum.INSTALL.equals(type) && fileName.endsWith(".exe")) {
+            if (ClientPackageEnum.INSTALL.equals(type) && !fileName.endsWith(".exe")) {
                 throw ExceptionResultEnum.ERROR.exception("安装包只能上传后缀为[.exe]的文件");
             }
-            if (ClientPackageEnum.UPGRADE.equals(type) && fileName.endsWith(".zip")) {
+            if (ClientPackageEnum.UPGRADE.equals(type) && !fileName.endsWith(".zip")) {
                 throw ExceptionResultEnum.ERROR.exception("升级包只能上传后缀为[.zip]的文件");
             }
 
@@ -68,8 +76,8 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
             //安装包
             if (ClientPackageEnum.INSTALL.equals(type)) {
                 // 上传
-                String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "release", platform) + file.getName();
-                FilePathVo filePathVo = fileUploadService.uploadFile(file.getInputStream(), filePathName, UploadFileEnum.UPGRADE);
+                String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "release", platform) + fileName;
+                FilePathVo filePathVo = fileUploadService.uploadFile(file, UploadFileEnum.UPGRADE, filePathName, fileMd5);
                 clientUpgrade.setInstallPath(JSON.toJSONString(filePathVo));
             } else if (ClientPackageEnum.UPGRADE.equals(type)) {
                 // 读取指定文件内容mainfest.josn
@@ -77,7 +85,7 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
                 if (StringUtils.isBlank(mainfestContent)) {
                     throw ExceptionResultEnum.ERROR.exception("读取mainfest.json文件内容失败");
                 }
-                // 解析mainfest.josn内容
+                // 解析mainfest.json内容
                 Mainfest mainfest = JSON.parseObject(mainfestContent, Mainfest.class);
                 String version = mainfest.getVersion();
                 if (StringUtils.isBlank(version)) {
@@ -92,26 +100,66 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
                     throw ExceptionResultEnum.ERROR.exception("supportMin值必填");
                 }
                 // 上传
-                String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build)) + file.getName();
-                FilePathVo filePathVo = fileUploadService.uploadFile(file.getInputStream(), filePathName, UploadFileEnum.UPGRADE);
+                String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build)) + fileName;
+                FilePathVo filePathVo = fileUploadService.uploadFile(file, UploadFileEnum.UPGRADE, filePathName, fileMd5);
                 clientUpgrade.setVersion(version);
                 clientUpgrade.setBuild(build);
                 clientUpgrade.setSupportMin(supportMin);
                 clientUpgrade.setUpgradePath(JSON.toJSONString(filePathVo));
 
                 // 升级包文件上传
-                File parentDirVar = SystemConstant.getFileTempParentDirVar(SystemConstant.ZIP_PREFIX);
-                Zip4jUtil.unzip(filePathName, parentDirVar.getPath());
+                parentDirVar = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
+                file.transferTo(parentDirVar);
+                ZipReader zipReader = new ZipReader(parentDirVar);
+                // 上传mainfest.json文件
+                String mainfestJson = "mainfest.json";
+                String mainfestPathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build)) + mainfestJson;
+                FilePathVo mainfestPathVo = fileUploadService.uploadFile(zipReader.read(mainfestJson), UploadFileEnum.UPGRADE, mainfestPathName, DigestUtils.md5Hex(zipReader.read(mainfestJson)));
+                clientUpgrade.setMainfestPath(JSON.toJSONString(mainfestPathVo));
+                // 上传app目录下文件
+                String app = "app";
+                for (MainfestApp mainfestApp : mainfest.getApp()) {
+                    // 上传
+                    uploadUpgradeZipFiles(version, build, zipReader, app, mainfestApp.getName());
+                }
+                // 上传script目录下文件
+                String script = "script";
+                MainfestScript mainfestScript = mainfest.getScript();
+                uploadUpgradeZipFiles(version, build, zipReader, script, mainfestScript.getBefore());
+                uploadUpgradeZipFiles(version, build, zipReader, script, mainfestScript.getAfter());
+                for (String includeFileName : mainfestScript.getIncludes()) {
+                    uploadUpgradeZipFiles(version, build, zipReader, script, includeFileName);
+                }
+                // 上传data目录下文件
+                String data = "data";
+                for (String dataFileName : mainfest.getData()) {
+                    uploadUpgradeZipFiles(version, build, zipReader, data, dataFileName);
+                }
             } else {
                 throw ExceptionResultEnum.ERROR.exception("请选择正确的包类型");
             }
             // 保存或更新
             this.saveOrUpdate(clientUpgrade);
-
-
         } catch (IOException e) {
             throw new RuntimeException(e);
         } finally {
+            if (parentDirVar != null) {
+                FileUtil.deleteFile(parentDirVar);
+            }
+        }
+    }
+
+    private void uploadUpgradeZipFiles(String version, int build, ZipReader zipReader, String pathType, String fileName) {
+        if (StringUtils.isBlank(fileName)) {
+            return;
+        }
+        // 上传
+        String filePath = pathType + File.separator + fileName;
+        String dataPathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build), pathType) + fileName;
+        try {
+            fileUploadService.uploadFile(zipReader.read(filePath), UploadFileEnum.UPGRADE, dataPathName, DigestUtils.md5Hex(zipReader.read(filePath)));
+        } catch (Exception e) {
+            throw ExceptionResultEnum.ERROR.exception(pathType + "目录下文件[" + fileName + "]上传失败");
         }
     }
 
@@ -131,6 +179,34 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
         return clientUpgrade;
     }
 
+    @Override
+    public ClientResult getExternalByPlatform(String platform) {
+        ClientUpgrade clientUpgrade = this.getByPlatform(platform);
+        ClientResult clientResult = new ClientResult();
+        ClientInstallResult clientInstallResult = new ClientInstallResult();
+        ClientUpgradeResult clientUpgradeResult = new ClientUpgradeResult();
+        String prefix = null;
+        if (StringUtils.isNotBlank(clientUpgrade.getInstallPath())) {
+            prefix = fileUploadService.filePreviewPrefix(clientUpgrade.getInstallPath());
+            String installUrl = JSON.parseObject(clientUpgrade.getInstallPath(), FilePathVo.class).getPath();
+            clientInstallResult.setUrl(installUrl);
+        }
+        clientResult.setInstall(clientInstallResult);
+        if (StringUtils.isNotBlank(clientUpgrade.getMainfestPath())) {
+            if (StringUtils.isBlank(prefix)) {
+                prefix = fileUploadService.filePreviewPrefix(clientUpgrade.getMainfestPath());
+            }
+            clientUpgradeResult.setVersion(clientUpgrade.getVersion());
+            clientUpgradeResult.setBuild(clientUpgrade.getBuild());
+            clientUpgradeResult.setSupportMin(clientUpgrade.getSupportMin());
+            String indexUrl = JSON.parseObject(clientUpgrade.getMainfestPath(), FilePathVo.class).getPath();
+            clientUpgradeResult.setIndex(indexUrl);
+        }
+        clientResult.setUpgrade(clientUpgradeResult);
+        clientResult.setPrefix(prefix);
+        return clientResult;
+    }
+
     /**
      * 读取mainfest.json文件
      *

+ 5 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/admin/ClientUpgradeController.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.api.admin;
 
+import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.ClientUpgradeService;
@@ -43,7 +44,7 @@ import java.util.stream.Collectors;
 @Api(tags = "超管-客户端升级Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SYS + "/client/package")
-@Validated
+@Aac(auth = false)
 public class ClientUpgradeController {
 
     @Resource
@@ -51,7 +52,7 @@ public class ClientUpgradeController {
 
     @ApiOperation(value = "上传安装包/升级包")
     @RequestMapping(value = "/upload", method = RequestMethod.POST)
-    public Result query(@ApiParam(value = "上传文件", required = true) @RequestParam(value = "file") MultipartFile file,
+    public Result upload(@ApiParam(value = "上传文件", required = true) @RequestParam(value = "file") MultipartFile file,
                         @ApiParam(value = "文件MD5", required = true) @RequestParam(value = "md5") String md5,
                         @ApiParam(value = "上传文件", required = true) @RequestParam(value = "type") ClientPackageEnum type) {
         clientUpgradeService.upload(file, md5, type);
@@ -60,8 +61,8 @@ public class ClientUpgradeController {
 
     @ApiOperation(value = "升级信息接口")
     @RequestMapping(value = "/external", method = RequestMethod.POST)
-    public Result remove(@RequestBody BasicCourse course) {
-        return ResultUtil.ok();
+    public Result external(@ApiParam(value = "上传文件") @RequestParam(value = "platform", required = false, defaultValue = "WINDOWS") String platform) {
+        return ResultUtil.ok(clientUpgradeService.getExternalByPlatform(platform));
     }
 
 }

+ 1 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanLogController.java

@@ -32,6 +32,7 @@ import javax.validation.constraints.Min;
 @Api(tags = "扫描日志上传知学知考接口")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/log")
+@Aac(auth = false)
 public class ScanLogController {
 
     @Resource
@@ -42,7 +43,6 @@ public class ScanLogController {
      */
     @ApiOperation(value = "日志文件上传")
     @RequestMapping(value = "/upload", method = RequestMethod.POST)
-    @Aac(auth = false)
     public Result upload(@ApiParam(value = "学校代码", required = true) @RequestParam String schoolCode,
                          @ApiParam(value = "设备编号", required = true) @RequestParam String deviceCode,
                          @ApiParam(value = "文件", required = true) @RequestParam MultipartFile file,
@@ -57,7 +57,6 @@ public class ScanLogController {
      */
     @ApiOperation(value = "日志文件查询")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
-    @Aac(auth = false)
     public Result listGroupQuestions(@ApiParam(value = "学校代码") @RequestParam(required = false) String schoolCode,
                                      @ApiParam(value = "扫描账号") @RequestParam(required = false) String loginName,
                                      @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,

+ 11 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/FileUploadService.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.service;
 import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.io.InputStream;
@@ -10,12 +11,21 @@ import java.io.InputStream;
 public interface FileUploadService {
 
     FilePathVo uploadFile(File sourceFile, UploadFileEnum uploadFileEnum, String fileName);
-    FilePathVo uploadFile(InputStream in, String filePathName, UploadFileEnum uploadFileEnum);
+
+    FilePathVo uploadFile(MultipartFile file, UploadFileEnum uploadFileEnum, String fileName, String md5);
+    FilePathVo uploadFile(InputStream inputStream, UploadFileEnum uploadFileEnum, String fileName, String md5);
+
     File downloadFile(String path, String pathName) throws Exception;
+
     File downloadFile(String type, UploadFileEnum uploadFileEnum, String path, String pathName) throws Exception;
+
     File downloadFile(Long attachmentId, String pathName) throws Exception;
+
     File downloadFile(BasicAttachment attachment, String pathName) throws Exception;
+
     String filePreview(String path);
+
     String filePreview(Long attachmentId);
 
+    String filePreviewPrefix(String path);
 }

+ 73 - 10
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/FileUploadServiceImpl.java

@@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.File;
@@ -82,13 +83,13 @@ public class FileUploadServiceImpl implements FileUploadService {
 
     /**
      *
-     * @param in
-     * @param filePathName
+     * @param file
+     * @param fileName
      * @param uploadFileEnum
      * @return
      */
     @Override
-    public FilePathVo uploadFile(InputStream in, String filePathName, UploadFileEnum uploadFileEnum) {
+    public FilePathVo uploadFile(MultipartFile file, UploadFileEnum uploadFileEnum, String fileName, String md5) {
         try {
             boolean oss = dictionaryConfig.sysDomain().isOss();
             StringJoiner pdfStringJoiner = new StringJoiner("");
@@ -96,12 +97,45 @@ public class FileUploadServiceImpl implements FileUploadService {
             if (StringUtils.isNotBlank(fssConfig)) {
                 pdfStringJoiner.add(dictionaryConfig.fssPrivateDomain().getConfig()).add(File.separator);
             }
-            pdfStringJoiner.add(uploadFileEnum.getTitle()).add(File.separator).add(filePathName);
+            pdfStringJoiner.add(uploadFileEnum.getTitle()).add(File.separator).add(fileName);
             String uploadFileName = FileUtil.replaceSplit(pdfStringJoiner.toString());
-            uploadFile(oss, uploadFileEnum, uploadFileName, in);
+            uploadFile(oss, uploadFileEnum, uploadFileName, file.getInputStream(), md5);
 
             String type = isOssUpload(oss, uploadFileEnum) ? SystemConstant.OSS : SystemConstant.LOCAL;
-            return new FilePathVo(uploadFileName, uploadFileEnum, type, FileUtil.md5File(in));
+            return new FilePathVo(uploadFileName, uploadFileEnum, type, md5);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return null;
+    }
+
+    /**
+     *
+     * @param file
+     * @param fileName
+     * @param uploadFileEnum
+     * @return
+     */
+    @Override
+    public FilePathVo uploadFile(InputStream inputStream, UploadFileEnum uploadFileEnum, String fileName, String md5) {
+        try {
+            boolean oss = dictionaryConfig.sysDomain().isOss();
+            StringJoiner pdfStringJoiner = new StringJoiner("");
+            String fssConfig = findFssConfig(oss, uploadFileEnum);
+            if (StringUtils.isNotBlank(fssConfig)) {
+                pdfStringJoiner.add(dictionaryConfig.fssPrivateDomain().getConfig()).add(File.separator);
+            }
+            pdfStringJoiner.add(uploadFileEnum.getTitle()).add(File.separator).add(fileName);
+            String uploadFileName = FileUtil.replaceSplit(pdfStringJoiner.toString());
+            uploadFile(oss, uploadFileEnum, uploadFileName, inputStream, md5);
+
+            String type = isOssUpload(oss, uploadFileEnum) ? SystemConstant.OSS : SystemConstant.LOCAL;
+            return new FilePathVo(uploadFileName, uploadFileEnum, type, md5);
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             if (e instanceof ApiException) {
@@ -243,6 +277,36 @@ public class FileUploadServiceImpl implements FileUploadService {
         return FileUtil.replaceSplit(url);
     }
 
+    /**
+     * 预览文件
+     *
+     * @param path 文件路径
+     */
+    @Override
+    public String filePreviewPrefix(String path) {
+        if (StringUtils.isBlank(path)) {
+            return null;
+        }
+        String prefix="";
+        FilePathVo filePathVo = JSON.parseObject(path, FilePathVo.class);
+        String filePath = filePathVo.getPath();
+        if (StringUtils.isBlank(filePath)) {
+            return null;
+        }
+        if (Objects.equals(filePathVo.getType(), SystemConstant.LOCAL)) {
+            if (filePath.contains(dictionaryConfig.fssPrivateDomain().getServer())) {
+//                url = filePath.substring(filePath.indexOf(dictionaryConfig.fssPrivateDomain().getServer()), filePath.length());
+            } else if (filePath.contains(dictionaryConfig.fssPublicDomain().getServer())) {
+//                url = filePath.substring(filePath.indexOf(dictionaryConfig.fssPublicDomain().getServer()), filePath.length());
+            } else {
+                prefix = fileStoreUtil.getPrivateUrlPrefix(filePath, filePathVo.getUploadType().getFssType());
+            }
+        } else {
+            prefix = fileStoreUtil.getPrivateUrlPrefix(filePath, filePathVo.getUploadType().getFssType());
+        }
+        return FileUtil.replaceSplit(prefix);
+    }
+
     /**
      * 预览文件
      *
@@ -323,13 +387,12 @@ public class FileUploadServiceImpl implements FileUploadService {
             fileStoreUtil.localUpload(uploadFileName, new FileInputStream(file), DigestUtils.md5Hex(new FileInputStream(file)), LocalCatalogEnum.LOCAL_PDF);
         }
     }
-    public void uploadFile(boolean oss, UploadFileEnum uploadFileEnum, String uploadFileName, InputStream in) throws Exception {
+    public void uploadFile(boolean oss, UploadFileEnum uploadFileEnum, String uploadFileName, InputStream in, String md5) throws Exception {
         FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
-        InputStream inputStream = in;
         if (isOssUpload(oss, uploadFileEnum)) {
-            fileStoreUtil.ossUpload(uploadFileName, in, DigestUtils.md5Hex(inputStream), fileStoreUtil.getUploadEnumByPath(uploadFileName).getFssType());
+            fileStoreUtil.ossUpload(uploadFileName, in, md5, fileStoreUtil.getUploadEnumByPath(uploadFileName).getFssType());
         } else {
-            fileStoreUtil.localUpload(uploadFileName, in, DigestUtils.md5Hex(inputStream), LocalCatalogEnum.LOCAL_PDF);
+            fileStoreUtil.localUpload(uploadFileName, in, md5, LocalCatalogEnum.LOCAL_PDF);
         }
     }
 

+ 28 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileStoreUtil.java

@@ -237,6 +237,34 @@ public class FileStoreUtil {
         }
     }
 
+    /**
+     * 获取文件访问url
+     *
+     * @param objectPath 文件路径
+     * @param type       文件上传的类型
+     * @return
+     */
+    public String getPrivateUrlPrefix(String objectPath, String type) {
+        String server = null;
+        if ("public".equals(type)) {
+            return server + SystemConstant.ORG_SPLIT;
+        } else if ("private".equals(type)) {
+            Boolean oss = dictionaryConfig.sysDomain().isOss();
+            if (Objects.nonNull(oss) && oss) {
+                FileStore fileStore = fileService.getFileStore(type);
+                return fileStore.getServer() + SystemConstant.ORG_SPLIT;
+            } else {
+                if (objectPath.startsWith(SystemConstant.ORG_SPLIT)) {
+                    return dictionaryConfig.fssPrivateDomain().getServer();
+                } else {
+                    return dictionaryConfig.fssPrivateDomain().getServer() + SystemConstant.ORG_SPLIT;
+                }
+            }
+        } else {
+            throw ExceptionResultEnum.ERROR.exception("文件存储store类型不存在");
+        }
+    }
+
     /**
      * 获取文件访问url
      *