Przeglądaj źródła

upgrade fss api...

deason 11 miesięcy temu
rodzic
commit
32132a5239
21 zmienionych plików z 269 dodań i 469 usunięć
  1. 2 5
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/QuestionAudioController.java
  2. 51 0
      examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/FileConstants.java
  3. 12 24
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ClonePaperService.java
  4. 11 26
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ImportPaperService.java
  5. 26 33
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/UpYunService.java
  6. 0 84
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/config/SysProperty.java
  7. 10 17
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/consumer/CopyDataConsumer.java
  8. 13 18
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/consumer/CopyDataNoReduplicateConsumer.java
  9. 31 59
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java
  10. 7 9
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExamFileServiceImpl.java
  11. 13 13
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportPaperServiceImpl.java
  12. 4 11
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportStructureServiceImpl.java
  13. 38 64
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportTemplateServiceImpl.java
  14. 11 7
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportThemisPaperServiceImpl.java
  15. 8 7
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigFileServiceImpl.java
  16. 3 4
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigProviderServiceImpl.java
  17. 3 4
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigServiceImpl.java
  18. 6 53
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java
  19. 14 23
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuestionAudioServiceImpl.java
  20. 6 4
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/util/ExportPaperUtil.java
  21. 0 4
      examcloud-core-questions-starter/src/main/java/cn/com/qmth/examcloud/core/questions/starter/CoreQuestionApp.java

+ 2 - 5
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/QuestionAudioController.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.core.questions.api.controller;
 
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -10,7 +11,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 import cn.com.qmth.examcloud.web.support.Naked;
 import io.swagger.annotations.ApiOperation;
 
@@ -43,10 +43,7 @@ public class QuestionAudioController {
         QuestionAudio questionAudio = questionAudioService.findAudioById(questionAudioId);
 
         if (questionAudio != null) {
-            //补全路径
-//            questionAudio.setFileUrl(sysProperty.getDomain() + questionAudio.getFileUrl());
-        	//通用存储
-        	questionAudio.setFileUrl(FileStorageUtil.realPath(questionAudio.getFileUrl()));
+        	questionAudio.setFileUrl(FssHelper.finalFileUrl(questionAudio.getFileUrl()));
         }
 
         return new ResponseEntity<>(questionAudio, HttpStatus.OK);

+ 51 - 0
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/FileConstants.java

@@ -0,0 +1,51 @@
+package cn.com.qmth.examcloud.core.questions.base;
+
+/**
+ * 文件存储相关常量
+ */
+public interface FileConstants {
+
+    /**
+     * 文件路径分隔符
+     */
+    String FILE_PATH_SEPARATOR = "/";
+
+    String TEMP_FILE_EXPORT = "docxExport/";
+
+    /**
+     * 导出模板文件路径
+     * /question/export-template/{rootOrgId}/{fileName}.zip(.ftl)
+     */
+    String EXPORT_TEMPLATE = "/question/export-template/%s/%s";
+
+    /**
+     * 试题音频文件路径
+     * /comm-ques-bank/prod/audio/{fileName}.mp3
+     */
+    String RADIO_UPLOAD_PATH = "/comm-ques-bank/prod/audio/%s";
+
+    /**
+     * 客观题导出结构文件路径
+     * /comm-ques-bank/prod/exam-paper-file/{rootOrgId}/{fileName}.xlsx
+     */
+    String OBJECTIVE_QUESTION_STRUCTURES = "/comm-ques-bank/prod/exam-paper-file/%s/%s";
+
+    /**
+     * 主观题导出结构文件路径
+     * /comm-ques-bank/prod/exam-paper-file/{rootOrgId}/{fileName}.xlsx
+     */
+    String SUBJECTIVE_QUESTION_STRUCTURES = "/comm-ques-bank/prod/exam-paper-file/%s/%s";
+
+    /**
+     * 机考文件路径
+     * /comm-ques-bank/prod/exam-paper-file/{rootOrgId}/{fileName}.zip
+     */
+    String COMPUTER_TEST_FILE = "/comm-ques-bank/prod/exam-paper-file/%s/%s";
+
+    /**
+     * 试卷或答案Word文件路径
+     * /comm-ques-bank/prod/exam-paper-file/{rootOrgId}/{fileName}.docx
+     */
+    String PAPER_OR_ANSWER_FILE = "/comm-ques-bank/prod/exam-paper-file/%s/%s";
+
+}

+ 12 - 24
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ClonePaperService.java

@@ -16,6 +16,10 @@ import java.util.Map;
 import java.util.TreeMap;
 import java.util.UUID;
 
+import cn.com.qmth.examcloud.core.questions.base.*;
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
+import cn.com.qmth.examcloud.support.fss.model.FssFileInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,10 +29,6 @@ import org.springframework.stereotype.Service;
 import com.google.common.collect.Lists;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
-import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
-import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
-import cn.com.qmth.examcloud.core.questions.base.IoUtils;
-import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.exception.PaperException;
 import cn.com.qmth.examcloud.core.questions.dao.PaperDetailRepo;
 import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
@@ -41,11 +41,7 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuesOption;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.impl.CourseService;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
-import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
-import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 
 /**
  * 复制试卷接口类
@@ -63,15 +59,11 @@ public class ClonePaperService {
     private PaperDetailUnitRepo paperDetailUnitRepo;
     @Autowired
     private QuestionAudioService questionAudioService;
-//    @Autowired
-//    private QuesPkgPathRepo quesPkgPathRepo;
     @Autowired
     private QuesRepo quesRepo;
     @Autowired
     private QuesTypeNameService quesTypeNameService;
     @Autowired
-    private SysProperty sysProperty;
-    @Autowired
     private CourseService courseService;
 
     /**
@@ -255,8 +247,7 @@ public class ClonePaperService {
      * 处理试题的音频(下载上传到云存储)
      */
     private void dealQuestionAudios(Map<PaperDetail, List<PaperDetailUnit>> detailMaps, String userName) throws PaperException {
-//        UpYun upYun = upYunService.getInstance();
-        String copyAudioPath = UpYunService.TEMP_FILE_EXP + File.separator + userName + "_copyAudioPath";
+        String copyAudioPath = FileConstants.TEMP_FILE_EXPORT + File.separator + userName + "_copyAudioPath";
         File copyAudioDir = new File(copyAudioPath);
         if (!copyAudioDir.exists()) {
             copyAudioDir.mkdirs();
@@ -275,20 +266,17 @@ public class ClonePaperService {
                     File audioFile = new File(copyAudioPath + File.separator + newAudioFileName);
 
                     log.info("-->start readAudioFile:" + newAudioFileName);
-//                    upYun.readFile(audio.getFileUrl(), audioFile);
-                  //通用存储
-                    FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), audioFile);
+
+                    String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+                    FssFactory.getInstance().readFile(filePath, audioFile);
+
                     log.info("-->end readAudioFile:" + newAudioFileName);
 
                     //重新上传新的音频文件
-                    String newPath = sysProperty.getRadioUploadPath() + newAudioFileName;
+                    String newPath = String.format(FileConstants.RADIO_UPLOAD_PATH, newAudioFileName);
                     try {
-//                        upYun.writeFile(newPath, audioFile, true);
-                        //通用存储
-                		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
-                		env.setRelativePath(newPath);
-                		YunPathInfo pi=FileStorageUtil.saveFile("audioFile", env, audioFile,null);
-                        audio.setFileUrl(pi.getRelativePath());//设置新路径
+                        FssFileInfo result = FssFactory.getInstance().writeFile(newPath, audioFile, null);
+                        audio.setFileUrl(result.getFileUrl());//设置新路径
                     } catch (Exception e) {
                         throw new PaperException("上传音频文件失败!");
                     } finally {

+ 11 - 26
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ImportPaperService.java

@@ -20,6 +20,10 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import cn.com.qmth.examcloud.core.questions.base.*;
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
+import cn.com.qmth.examcloud.support.fss.model.FssFileInfo;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
@@ -38,10 +42,6 @@ import com.google.gson.Gson;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
-import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
-import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
-import cn.com.qmth.examcloud.core.questions.base.IoUtils;
-import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperStatus;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
 import cn.com.qmth.examcloud.core.questions.base.enums.QuesUnit;
@@ -67,11 +67,7 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.QuesProperty;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionType;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.impl.CourseService;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
-import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
-import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 
 @Service
 public class ImportPaperService {
@@ -115,9 +111,6 @@ public class ImportPaperService {
     @Autowired
     QuesTypeNameService quesTypeNameService;
 
-//    @Autowired
-//    QuesPkgPathRepo quesPkgPathRepo;
-
     @Autowired
     CoursePropertyRepo coursePropertyRepo;
 
@@ -127,9 +120,6 @@ public class ImportPaperService {
     @Autowired
     QuestionAudioService questionAudioService;
 
-    @Autowired
-    SysProperty sysProperty;
-
     public static final String TEMP_FILE_EXP = "docxExport/";
 
     private Random random = new Random();
@@ -1957,29 +1947,24 @@ public class ImportPaperService {
                     int randomNumber = random.nextInt(1000);
                     // 定义文件下载名称,下载音频文件
                     String newAudioFileName = newQuestion.getId() + "_" + randomNumber + "_" + oldAudio.getFileName();
-//                    UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(),
-//                            sysProperty.getPassword());
+
                     // 下载音频
                     File audioFile = new File(copyAudioPath + File.separator + newAudioFileName);
                     try {
-//                        upyun.readFile(oldAudio.getFileUrl(), audioFile);
-                      //通用存储
-                        FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(oldAudio.getFileUrl()), audioFile);
+                        String filePath = FssHelper.fixFilePath(oldAudio.getFileUrl());
+                        FssFactory.getInstance().readFile(filePath, audioFile);
                     } catch (Exception e) {
                         log.error(e.getMessage(), e);
                         throw new RuntimeException("下载音频失败");
                     }
                     // 重新上传新的音频文件
-//                    upyun.writeFile(sysProperty.getRadioUploadPath() + newAudioFileName, audioFile, true);
-                  //通用存储
-            		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
-            		env.setRelativePath(sysProperty.getRadioUploadPath() + newAudioFileName);
-            		YunPathInfo pi=FileStorageUtil.saveFile("audioFile", env, audioFile,null);
-            		
+                    String newPath = String.format(FileConstants.RADIO_UPLOAD_PATH, newAudioFileName);
+                    FssFileInfo result = FssFactory.getInstance().writeFile(newPath, audioFile, null);
+
                     IoUtils.removeFile(audioFile);
 
                     // 拷贝旧对象
-                    QuestionAudio newAudio = new QuestionAudio(newQuestion.getId(), oldAudio.getFileName(),pi.getRelativePath());
+                    QuestionAudio newAudio = new QuestionAudio(newQuestion.getId(), oldAudio.getFileName(),result.getFileUrl());
                     newAudio.setCreateTime(new Date());
                     newAudio.setCreateUser(user.getDisplayName());
                     questionAudioService.saveQuestionAudio(newAudio, user);

+ 26 - 33
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/UpYunService.java

@@ -1,33 +1,26 @@
-package cn.com.qmth.examcloud.core.questions.service;
-
-import java.util.UUID;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-
-@Service
-public class UpYunService {
-    private static final Logger log = LoggerFactory.getLogger(UpYunService.class);
-
-    public static final String TEMP_FILE_EXP = "docxExport/";
-
-    @Autowired
-    private SysProperty sysProperty;
-
-//    public UpYun getInstance() {
-//        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//        upyun.setDebug(true);
-//        upyun.setTimeout(15);
-//        upyun.setApiDomain(UpYun.ED_AUTO);
-//        return upyun;
-//    }
-
-    public String randomUUID() {
-        return UUID.randomUUID().toString().replaceAll("-", "");
-    }
-
-}
+// package cn.com.qmth.examcloud.core.questions.service;
+//
+// import java.util.UUID;
+//
+// import org.slf4j.Logger;
+// import org.slf4j.LoggerFactory;
+// import org.springframework.beans.factory.annotation.Autowired;
+// import org.springframework.stereotype.Service;
+//
+// import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
+//
+// @Service
+// public class UpYunService {
+//     private static final Logger log = LoggerFactory.getLogger(UpYunService.class);
+//
+//     public static final String TEMP_FILE_EXP = "docxExport/";
+//
+//     @Autowired
+//     private SysProperty sysProperty;
+//
+//     public String randomUUID() {
+//         return UUID.randomUUID().toString().replaceAll("-", "");
+//     }
+//
+// }
+//

+ 0 - 84
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/config/SysProperty.java

@@ -6,24 +6,6 @@ import org.springframework.stereotype.Component;
 @Component
 public class SysProperty {
 
-//    @Value("${$upyun.site.1.domain}")
-//    protected String domain;
-//
-//    @Value("${$upyun.site.1.bucketName}")
-//    protected String bucketName;
-//
-//    @Value("${$upyun.site.1.userName}")
-//    protected String userName;
-//
-//    @Value("${$upyun.site.1.password}")
-//    protected String password;
-
-    @Value("${upyun.uploadUrl}")
-    private String uploadPath;
-
-    @Value("${upyun.audio.uploadUrl}")
-    private String radioUploadPath;
-
     @Value("${upyun.radioType}")
     private String radioType;
 
@@ -39,72 +21,6 @@ public class SysProperty {
     @Value("${question.reduplicate.similarity}")
     private Double reduplicateSimilarity;
 
-//    public String getDomain() {
-//        if (domain != null) {
-//            return domain.trim();
-//        }
-//        return "";
-//    }
-//
-//    public void setDomain(String domain) {
-//        this.domain = domain;
-//    }
-//
-//    public String getBucketName() {
-//        if (bucketName != null) {
-//            return bucketName.trim();
-//        }
-//        return "";
-//    }
-//
-//    public void setBucketName(String bucketName) {
-//        this.bucketName = bucketName;
-//    }
-//
-//    public String getUserName() {
-//        if (userName != null) {
-//            return userName.trim();
-//        }
-//        return "";
-//    }
-//
-//    public void setUserName(String userName) {
-//        this.userName = userName;
-//    }
-//
-//    public String getPassword() {
-//        if (password != null) {
-//            return password.trim();
-//        }
-//        return "";
-//    }
-//
-//    public void setPassword(String password) {
-//        this.password = password;
-//    }
-
-    public String getUploadPath() {
-        if (uploadPath != null) {
-            return uploadPath.trim();
-        }
-        return "";
-    }
-
-    public void setUploadPath(String uploadPath) {
-        this.uploadPath = uploadPath;
-    }
-
-    public String getRadioUploadPath() {
-        if (radioUploadPath != null) {
-            return radioUploadPath.trim();
-        }
-        return "";
-    }
-
-    public void setRadioUploadPath(String radioUploadPath) {
-        this.radioUploadPath = radioUploadPath;
-    }
-
     public String getRadioType() {
         if (radioType != null) {
             return radioType.trim();

+ 10 - 17
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/consumer/CopyDataConsumer.java

@@ -9,6 +9,10 @@ import java.util.Map;
 import java.util.TreeMap;
 import java.util.UUID;
 
+import cn.com.qmth.examcloud.core.questions.base.FileConstants;
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
+import cn.com.qmth.examcloud.support.fss.model.FssFileInfo;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -45,12 +49,7 @@ import cn.com.qmth.examcloud.core.questions.service.PaperService;
 import cn.com.qmth.examcloud.core.questions.service.PropertyService;
 import cn.com.qmth.examcloud.core.questions.service.QuesService;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.core.questions.service.UpYunService;
 import cn.com.qmth.examcloud.core.questions.service.bean.CopyDataDto;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
-import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
-import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 
 @Scope("prototype")
@@ -69,8 +68,6 @@ public class CopyDataConsumer extends Consumer<CopyDataDto> {
 	private PropertyService propertyService;
 	@Autowired
 	private PropertyRepo propertyRepo;
-	@Autowired
-	private SysProperty sysProperty;
 
 	@Autowired
 	private PaperDetailRepo paperDetailRepo;
@@ -361,8 +358,7 @@ public class CopyDataConsumer extends Consumer<CopyDataDto> {
 	 * 处理试题的音频(下载上传到云存储)
 	 */
 	private void dealQuestionAudios(Map<PaperDetail, List<PaperDetailUnit>> detailMaps, String userName) {
-//        UpYun upYun = upYunService.getInstance();
-		String copyAudioPath = UpYunService.TEMP_FILE_EXP + File.separator + randomUUID();
+		String copyAudioPath = FileConstants.TEMP_FILE_EXPORT + File.separator + randomUUID();
 		File copyAudioDir = new File(copyAudioPath);
 		if (!copyAudioDir.exists()) {
 			copyAudioDir.mkdirs();
@@ -380,19 +376,16 @@ public class CopyDataConsumer extends Consumer<CopyDataDto> {
 					String newAudioFileName = randomUUID() + "_" + audio.getFileName();
 					File audioFile = new File(copyAudioPath + File.separator + newAudioFileName);
 
-//                    upYun.readFile(audio.getFileUrl(), audioFile);
 					// 通用存储
-					FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), audioFile);
+					String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+					FssFactory.getInstance().readFile(filePath, audioFile);
 
 					// 重新上传新的音频文件
-					String newPath = sysProperty.getRadioUploadPath() + newAudioFileName;
+					String newPath = String.format(FileConstants.RADIO_UPLOAD_PATH, newAudioFileName);
 					try {
-//                        upYun.writeFile(newPath, audioFile, true);
 						// 通用存储
-						FileStoragePathEnvInfo env = new FileStoragePathEnvInfo();
-						env.setRelativePath(newPath);
-						YunPathInfo pi = FileStorageUtil.saveFile("audioFile", env, audioFile, null);
-						audio.setFileUrl(pi.getRelativePath());// 设置新路径
+						FssFileInfo result = FssFactory.getInstance().writeFile(newPath, audioFile, null);
+						audio.setFileUrl(result.getFileUrl());//设置新路径
 					} catch (Exception e) {
 						throw new StatusException("上传音频文件失败!");
 					} finally {

+ 13 - 18
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/consumer/CopyDataNoReduplicateConsumer.java

@@ -12,6 +12,10 @@ import java.util.UUID;
 
 import javax.annotation.Resource;
 
+import cn.com.qmth.examcloud.core.questions.base.FileConstants;
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
+import cn.com.qmth.examcloud.support.fss.model.FssFileInfo;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.bson.types.ObjectId;
@@ -50,12 +54,7 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.service.QuesTypeNameService;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.core.questions.service.UpYunService;
 import cn.com.qmth.examcloud.core.questions.service.bean.CopyDataNoReduplicateDto;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
-import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
-import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 
 @Scope("prototype")
@@ -63,14 +62,15 @@ import cn.com.qmth.examcloud.web.redis.RedisClient;
 public class CopyDataNoReduplicateConsumer extends Consumer<CopyDataNoReduplicateDto> {
 	private static int cacheLockTimeout = 60 * 10;
 	private static String withoutReduplicateLock = "$_COPY_QUESTION_DATA_NO_REDUPLICATE_LOCK";
+
 	@Autowired
 	private RedisClient redisClient;
+
 	@Autowired
 	private PaperRepo paperRepo;
+
 	@Autowired
 	private QuestionAudioRepo questionAudioRepo;
-	@Autowired
-	private SysProperty sysProperty;
 
 	@Autowired
 	private PaperDetailRepo paperDetailRepo;
@@ -442,7 +442,7 @@ public class CopyDataNoReduplicateConsumer extends Consumer<CopyDataNoReduplicat
 	 * 处理试题的音频(下载上传到云存储)
 	 */
 	private void dealQuestionAudios(Question question) {
-		String copyAudioPath = UpYunService.TEMP_FILE_EXP + File.separator + randomUUID();
+		String copyAudioPath = FileConstants.TEMP_FILE_EXPORT + File.separator + randomUUID();
 		File copyAudioDir = new File(copyAudioPath);
 		if (!copyAudioDir.exists()) {
 			copyAudioDir.mkdirs();
@@ -456,19 +456,14 @@ public class CopyDataNoReduplicateConsumer extends Consumer<CopyDataNoReduplicat
 			String newAudioFileName = randomUUID() + "_" + audio.getFileName();
 			File audioFile = new File(copyAudioPath + File.separator + newAudioFileName);
 
-//                    upYun.readFile(audio.getFileUrl(), audioFile);
-			// 通用存储
-			FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), audioFile);
+			String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+			FssFactory.getInstance().readFile(filePath, audioFile);
 
 			// 重新上传新的音频文件
-			String newPath = sysProperty.getRadioUploadPath() + newAudioFileName;
+			String newPath = String.format(FileConstants.RADIO_UPLOAD_PATH, newAudioFileName);
 			try {
-//                        upYun.writeFile(newPath, audioFile, true);
-				// 通用存储
-				FileStoragePathEnvInfo env = new FileStoragePathEnvInfo();
-				env.setRelativePath(newPath);
-				YunPathInfo pi = FileStorageUtil.saveFile("audioFile", env, audioFile, null);
-				audio.setFileUrl(pi.getRelativePath());// 设置新路径
+				FssFileInfo result = FssFactory.getInstance().writeFile(newPath, audioFile, null);
+				audio.setFileUrl(result.getFileUrl());// 设置新路径
 			} catch (Exception e) {
 				throw new StatusException("上传音频文件失败!");
 			} finally {

+ 31 - 59
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java

@@ -13,6 +13,10 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import cn.com.qmth.examcloud.core.questions.base.*;
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
+import cn.com.qmth.examcloud.support.fss.model.FssFileInfo;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -29,11 +33,6 @@ import org.springframework.stereotype.Service;
 import com.google.gson.Gson;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
-import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
-import cn.com.qmth.examcloud.core.questions.base.FileDisposeUtil;
-import cn.com.qmth.examcloud.core.questions.base.IdUtils;
-import cn.com.qmth.examcloud.core.questions.base.IoUtils;
-import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
@@ -75,11 +74,7 @@ import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.SubjectiveQuestionStructure;
-import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.util.ExportPaperUtil;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
-import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
-import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 
@@ -130,12 +125,6 @@ public class ExportPaperAbstractService {
     @Autowired
     protected AudioTimeConfigRepo audioTimeConfigRepo;
 
-    // @Autowired
-    // protected QuesPkgPathRepo quesPkgPathRepo;
-
-    @Autowired
-    private SysProperty sysProperty;
-
     public static final String FILL_BLANK_QUESTION_FLAG = "###";
 
     public static final String TEMP_FILE_EXP = "docxExport/";
@@ -374,18 +363,15 @@ public class ExportPaperAbstractService {
             makeComputerTestPaperToJsonFile(extractConfig, computerTestPaper, jsonDirectoryPath);
             // 将文件夹打包成zip压缩包放在docxExport下
             FileDisposeUtil.fileToZip(jsonDirectoryPath, "docxExport", jsonDirectoryName);
+
             // 上传zip压缩包到又拍云
             File zipFile = new File(TEMP_FILE_EXP + jsonDirectoryName + ZIP_SUFFIX);
-            String zipUpyunFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/" + jsonDirectoryName
-                    + ZIP_SUFFIX;
-//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//            upyun.writeFile(zipUpyunFilePath, zipFile, true);
-            //通用存储
-    		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
-    		env.setRelativePath(zipUpyunFilePath);
-    		YunPathInfo pi=FileStorageUtil.saveFile("computerTestFile", env, zipFile,null);
+
+            String zipPath = String.format(FileConstants.COMPUTER_TEST_FILE, extractConfig.getOrgId(), jsonDirectoryName + ZIP_SUFFIX);
+            FssFileInfo result = FssFactory.getInstance().writeFile(zipPath, zipFile, null);
+
             // 保存数据库记录
-            ExamFile examFile = new ExamFile(computerTestPaper, extractConfig, pi.getRelativePath(),
+            ExamFile examFile = new ExamFile(computerTestPaper, extractConfig, result.getFilePath(),
                     ExamFileType.COMPUTERTEST_PACKAGE, ZIP_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFileService.saveExamFile(examFile, accessUser);
@@ -488,9 +474,11 @@ public class ExportPaperAbstractService {
                                     + audio.getFileSuffixes();
                             oNum++;
                         }
-                      //通用存储
-                        FileDisposeUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()),
-                                jsonDirectoryPath + File.separator + audioFileName);
+
+                        File audioFile = new File(jsonDirectoryPath + File.separator + audioFileName);
+
+                        String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+                        FssFactory.getInstance().readFile(filePath, audioFile);
                     }
                 }
             }
@@ -512,14 +500,11 @@ public class ExportPaperAbstractService {
             File file = new File(directory.getAbsoluteFile() + File.separator + paperFileName);
             ExportPaperUtil.createPaperDocFile(accessUser.getRootOrgId(), paperExp, directory, paperFileName,
                     templateType);
-            String paperFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/" + paperFileName;
-//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//            upyun.writeFile(paperFilePath, file, true);
-          //通用存储
-    		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
-    		env.setRelativePath(paperFilePath);
-    		YunPathInfo pi=FileStorageUtil.saveFile("paperOrAnswerFile", env, file,null);
-            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, pi.getRelativePath(), examFileType, DOCX_SUFFIX);
+
+            String paperFilePath = String.format(FileConstants.PAPER_OR_ANSWER_FILE, extractConfig.getOrgId(), paperFileName);
+            FssFileInfo result = FssFactory.getInstance().writeFile(paperFilePath, file, null);
+
+            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, result.getFilePath(), examFileType, DOCX_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(paperExp.getName()+"_"+extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_"
                     + examFileType.getName() + "_" + examFile.getGroupCode() + DOCX_SUFFIX);
@@ -572,16 +557,10 @@ public class ExportPaperAbstractService {
         try (FileOutputStream out = new FileOutputStream(file);) {
             objectiveExcelExporter.write(objectiveFilename, objectiveQuestionStructureList, out);
 
-            String objectiveFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/" + objectiveFilename;
-//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//            upyun.writeFile(objectiveFilePath, file, true);
-            
-            //通用存储
-      		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
-      		env.setRelativePath(objectiveFilePath);
-      		YunPathInfo pi=FileStorageUtil.saveFile("objectiveQuestionStructures", env, file,null);
+            String objectiveFilePath = String.format(FileConstants.OBJECTIVE_QUESTION_STRUCTURES, extractConfig.getOrgId(), objectiveFilename);
+            FssFileInfo result = FssFactory.getInstance().writeFile(objectiveFilePath, file, null);
 
-            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, pi.getRelativePath(),
+            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, result.getFilePath(),
                     ExamFileType.PAPER_STRUCTURE_OBJECTIVE, EXCEL_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_"
@@ -621,17 +600,10 @@ public class ExportPaperAbstractService {
         try (FileOutputStream out = new FileOutputStream(file);) {
             subjectiveExcelExporter.write(subjectiveFileName, subjectiveQuestionStructureList, out);
 
-            String subjectiveFilePath = sysProperty.getUploadPath() + extractConfig.getOrgId() + "/"
-                    + subjectiveFileName;
-//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//            upyun.writeFile(subjectiveFilePath, file, true);
-
-            //通用存储
-      		FileStoragePathEnvInfo env=new FileStoragePathEnvInfo();
-      		env.setRelativePath(subjectiveFilePath);
-      		YunPathInfo pi=FileStorageUtil.saveFile("subjectiveQuestionStructures", env, file,null);
+            String subjectiveFilePath = String.format(FileConstants.SUBJECTIVE_QUESTION_STRUCTURES, extractConfig.getOrgId(), subjectiveFileName);
+            FssFileInfo result = FssFactory.getInstance().writeFile(subjectiveFilePath, file, null);
       		
-            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, pi.getRelativePath(),
+            ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, result.getFilePath(),
                     ExamFileType.PAPER_STRUCTURE_SUBJECTIVE, EXCEL_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_"
@@ -886,8 +858,8 @@ public class ExportPaperAbstractService {
      */
     public void downloadAudio(PaperExp paperExp, String zipFileName) {
         // 先判断是否是音频试卷
-        if (paperExp.getHasAudio() != null && paperExp.getHasAudio() == true) {
-//            UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+        if (paperExp.getHasAudio() != null && paperExp.getHasAudio()) {
+
             // 取到所有大题
             List<PaperDetailExp> paperDetailExps = paperExp.getPaperDetails();
             if (paperDetailExps != null && paperDetailExps.size() > 0) {
@@ -904,9 +876,9 @@ public class ExportPaperAbstractService {
                                             + "_" + getAudioFileName(audio, unit, paperDetailExp);
                                     File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator
                                             + audioFileName);
-//                                    upyun.readFile(audio.getFileUrl(), file);
-                                    //通用存储
-									FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), file);
+
+                                    String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+                                    FssFactory.getInstance().readFile(filePath, file);
                                 }
                             }
                         }

+ 7 - 9
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExamFileServiceImpl.java

@@ -4,6 +4,8 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Example;
@@ -17,7 +19,6 @@ import cn.com.qmth.examcloud.core.questions.dao.ExamFileRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamFile;
 import cn.com.qmth.examcloud.core.questions.service.ExamFileService;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.ExportPaperInfoModel;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -33,9 +34,6 @@ public class ExamFileServiceImpl implements ExamFileService {
     @Autowired
     private MongoTemplate MongoTemplate;
 
-//    @Autowired
-//    private SysProperty sysProperty;
-
     @Override
     public void saveExamFiles(List<ExamFile> examFileList, User accessUser) {
         for (ExamFile examFile : examFileList) {
@@ -92,13 +90,13 @@ public class ExamFileServiceImpl implements ExamFileService {
         query.addCriteria(Criteria.where("examId").is(examFile.getExamId()));
         query.addCriteria(Criteria.where("courseId").is(examFile.getCourseId()));
         List<ExamFile> examFiles = MongoTemplate.find(query, ExamFile.class);
-//        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
+
         for (ExamFile examFile2 : examFiles) {
-            //删除又拍云上的文件
-//            upyun.deleteFile(examFile2.getFilePath());
-        	//通用存储
-        	FileStorageUtil.deleteFile(examFile2.getFilePath());
+            //删除云上的文件
+            String filePath = FssHelper.fixFilePath(examFile2.getFilePath());
+            FssFactory.getInstance().deleteFile(filePath);
         }
+
         examFileRepo.deleteAll(examFiles);
     }
 

+ 13 - 13
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportPaperServiceImpl.java

@@ -17,6 +17,8 @@ import java.util.regex.Pattern;
 
 import javax.servlet.http.HttpServletResponse;
 
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
@@ -83,7 +85,6 @@ import cn.com.qmth.examcloud.core.questions.service.util.ExportPaperUtil;
 import cn.com.qmth.examcloud.core.questions.service.util.PaperUtil;
 import cn.com.qmth.examcloud.reports.commons.bean.AdminOperateReport;
 import cn.com.qmth.examcloud.reports.commons.util.ReportsUtil;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 
 @Service("exportPaperService")
 public class ExportPaperServiceImpl implements ExportPaperService {
@@ -314,12 +315,12 @@ public class ExportPaperServiceImpl implements ExportPaperService {
                                         String audioFileName = questionAudio.getId() + "_" + detail.getNumber() + "_"
                                                 + question.getNumber() + "_1_" + bodyNum + "."
                                                 + questionAudio.getFileSuffixes();
-//                                        UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(),
-//                                                sysProperty.getPassword());
+
                                         File file = new File(jsonDirectory + File.separator + audioFileName);
-//                                        upyun.readFile(questionAudio.getFileUrl(), file);
-                                        //通用存储
-    									FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(questionAudio.getFileUrl()), file);
+
+                                        String filePath = FssHelper.fixFilePath(questionAudio.getFileUrl());
+                                        FssFactory.getInstance().readFile(filePath, file);
+
                                         bodyNum++;
                                     }
                                 }
@@ -346,13 +347,12 @@ public class ExportPaperServiceImpl implements ExportPaperService {
                                                             + detail.getNumber() + "_" + question.getNumber() + "_2_"
                                                             + computerTestOption.getNumber() + "_" + optionNum + "."
                                                             + questionAudio.getFileSuffixes();
-//                                                    UpYun upyun = new UpYun(sysProperty.getBucketName(),
-//                                                            sysProperty.getUserName(), sysProperty.getPassword());
-                                                    File file = new File(
-                                                            jsonDirectory + File.separator + audioFileName);
-//                                                    upyun.readFile(questionAudio.getFileUrl(), file);
-                                                    //通用存储
-                									FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(questionAudio.getFileUrl()), file);
+
+                                                    File file = new File(jsonDirectory + File.separator + audioFileName);
+
+                                                    String filePath = FssHelper.fixFilePath(questionAudio.getFileUrl());
+                                                    FssFactory.getInstance().readFile(filePath, file);
+
                                                     optionNum++;
                                                 }
                                             }

+ 4 - 11
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportStructureServiceImpl.java

@@ -4,6 +4,8 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -26,7 +28,6 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionTypeNum;
 import cn.com.qmth.examcloud.core.questions.service.ExamFileService;
 import cn.com.qmth.examcloud.core.questions.service.ExportStructureService;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -46,15 +47,9 @@ public class ExportStructureServiceImpl implements ExportStructureService {
     @Autowired
     private ExamFileService examFileService;
 
-//    @Autowired
-//    private ExtractConfigRepo extractConfigRepo;
-
     @Autowired
     private MongoTemplate mongoTemplate;
 
-//    @Autowired
-//    private SysProperty sysProperty;
-
     @Override
     public void saveExportStructure(ExportStructure exportStructure, User user) {
         if (StringUtils.isBlank(exportStructure.getId())) {
@@ -146,11 +141,9 @@ public class ExportStructureServiceImpl implements ExportStructureService {
             List<ExamFile> list = examFileService.findExamFileListByExamFile(new ExamFile(exportStructure.getExamId(), exportStructure.getOrgId()));
             if (list.size() > 0) {
                 //根据 ExamFile 对象查询  filePath ,并删除又拍云上的文件 , 然后在删除表里面的数据
-//                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
                 for (int i = 0; i < list.size(); i++) {
-//                    upyun.deleteFile(list.get(i).getFilePath());
-                	//通用存储
-                	FileStorageUtil.deleteFile(list.get(i).getFilePath());
+                    String filePath = FssHelper.fixFilePath(list.get(i).getFilePath());
+                    FssFactory.getInstance().deleteFile(filePath);
                 }
                 examFileRepo.deleteAll(list);
             }

+ 38 - 64
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportTemplateServiceImpl.java

@@ -2,13 +2,16 @@ package cn.com.qmth.examcloud.core.questions.service.impl;
 
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 import javax.persistence.criteria.Predicate;
 
+import cn.com.qmth.examcloud.core.questions.base.FileConstants;
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
+import cn.com.qmth.examcloud.support.fss.model.FssFileInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,9 +36,7 @@ import cn.com.qmth.examcloud.core.questions.base.enums.ExportTemplateType;
 import cn.com.qmth.examcloud.core.questions.dao.ExportTemplateRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExportTemplateEntity;
 import cn.com.qmth.examcloud.core.questions.service.ExportTemplateService;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 import cn.com.qmth.examcloud.web.config.SystemProperties;
-import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
 
 @Service("exportTemplateService")
 public class ExportTemplateServiceImpl implements ExportTemplateService {
@@ -48,8 +49,7 @@ public class ExportTemplateServiceImpl implements ExportTemplateService {
 	private ExportTemplateRepo exportTemplateRepo;
 
 	public static final String TEMP_FILE_EXP = "temp/exportTemplat/";
-//    @Autowired
-//    private UpyunService upyunService;
+
 	@Autowired
 	private SystemProperties systemProperties;
 
@@ -75,13 +75,12 @@ public class ExportTemplateServiceImpl implements ExportTemplateService {
 		List<ExportTemplateEntity> list = page.getContent();
 		List<ExportTemplateDto> retList = new ArrayList<ExportTemplateDto>();
 		if (list != null && list.size() > 0) {
-//            String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
 			for (ExportTemplateEntity e : list) {
 				ExportTemplateDto dto = new ExportTemplateDto();
 				BeanUtils.copyProperties(e, dto);
-//                dto.setFullFilePath(upyunFileUrl + dto.getFilePath());
-				// 通用存储
-				dto.setFullFilePath(FileStorageUtil.realPath(dto.getFilePath()));
+
+				dto.setFullFilePath(FssHelper.finalFileUrl(dto.getFilePath()));
+
 				dto.setTypeName(ExportTemplateType.getName(dto.getType()));
 				retList.add(dto);
 			}
@@ -111,44 +110,14 @@ public class ExportTemplateServiceImpl implements ExportTemplateService {
 		e.setSuffix(suffix);
 
 		String relativePath = e.getFileKey() + "." + e.getSuffix();
-//        UpyunPathEnvironmentInfo env = new UpyunPathEnvironmentInfo();
-//        env.setRootOrgId(rootOrgId.toString());
-//        env.setRelativePath(relativePath);
-//        String fpath = null;
-//        InputStream is = null;
-//        try {
-//            is = dataFile.getInputStream();
-//            fpath = upyunService.writeFile("export_template", env, is, null).getRelativePath();
-//        } catch (IOException e1) {
-//            throw new StatusException("10003", "模板上传出错");
-//        } finally {
-//            if (is != null) {
-//                try {
-//                    is.close();
-//                } catch (IOException e1) {
-//                    log.warn("InputStream close faild!");
-//                }
-//            }
-//        }
-		// 通用存储
-		FileStoragePathEnvInfo env = new FileStoragePathEnvInfo();
-		env.setRootOrgId(rootOrgId.toString());
-		env.setRelativePath(relativePath);
-		InputStream is = null;
+
 		try {
-			is = dataFile.getInputStream();
-			String fpath = FileStorageUtil.saveFile("export_template", env, is, null).getRelativePath();
-			e.setFilePath(fpath);
-		} catch (IOException e1) {
+			String filePath = String.format(FileConstants.EXPORT_TEMPLATE, rootOrgId, relativePath);
+			FssFileInfo result = FssFactory.getInstance().writeFile(filePath, dataFile.getBytes(), null);
+			e.setFilePath(result.getFilePath());
+		} catch (IOException ee) {
+			LOG.error("{} 模板上传出错!{}", relativePath, ee.getMessage());
 			throw new StatusException("10003", "模板上传出错");
-		} finally {
-			if (is != null) {
-				try {
-					is.close();
-				} catch (IOException e1) {
-					LOG.warn("InputStream close faild!");
-				}
-			}
 		}
 
 		exportTemplateRepo.save(e);
@@ -205,14 +174,12 @@ public class ExportTemplateServiceImpl implements ExportTemplateService {
 		String filePath = temPath + "/" + rootOrgId + "/" + fileName;
 		File f = new File(filePath);
 		if (!f.exists()) {
-//			String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
-			//通用存储
-			createExportTemplateFile(FileStorageUtil.realPath(et.getFilePath()), filePath);
+			createExportTemplateFile(et.getFilePath(), filePath);
 		}
 		return fileName;
 	}
 
-	private synchronized void createExportTemplateFile(String fileUrl, String localFilePath) {
+	private synchronized void createExportTemplateFile(String etFilePath, String localFilePath) {
 		File f = new File(localFilePath);
 		File dir = f.getParentFile();
 		try {
@@ -223,7 +190,11 @@ public class ExportTemplateServiceImpl implements ExportTemplateService {
 		} catch (IOException e) {
 			throw new StatusException("60001", "创建模板文件失败");
 		}
-		if (!FileDisposeUtil.saveUrlAs(fileUrl, localFilePath)) {
+
+		try {
+			String okFilePath = FssHelper.fixFilePath(etFilePath);
+			FssFactory.getInstance().readFile(okFilePath, f);
+		} catch (Exception e) {
 			f.delete();
 			throw new StatusException("60002", "获取模板到本地失败");
 		}
@@ -255,15 +226,13 @@ public class ExportTemplateServiceImpl implements ExportTemplateService {
 			String filePath = temPath + "/" + rootOrgId + "/" + fileName;
 			File f = new File(filePath);
 			if (!f.exists()) {
-//				String upyunFileUrl = PropertyHolder.getString("$upyun.site.1.domain");
-				//通用存储
-				createExportTemplateDir(FileStorageUtil.realPath(et.getFilePath()), filePath, dir);
+				createExportTemplateDir(et.getFilePath(), filePath, dir);
 			}
 			return dir;
 		}
 	}
 
-	private synchronized void createExportTemplateDir(String fileUrl, String localFilePath, File directory) {
+	private synchronized void createExportTemplateDir(String etFilePath, String localFilePath, File directory) {
 		File f = new File(localFilePath);
 		File dir = f.getParentFile();
 		try {
@@ -277,16 +246,21 @@ public class ExportTemplateServiceImpl implements ExportTemplateService {
 		} catch (IOException e) {
 			throw new StatusException("80001", "创建模板文件失败");
 		}
-		if (!FileDisposeUtil.saveUrlAs(fileUrl, localFilePath)) {
+
+		try {
+			String okFilePath = FssHelper.fixFilePath(etFilePath);
+			FssFactory.getInstance().readFile(okFilePath, f);
+		} catch (Exception e) {
+			f.delete();
+			throw new StatusException("60002", "获取模板到本地失败");
+		}
+
+		try {
+			FileDisposeUtil.unZipFiles(localFilePath, directory.getAbsolutePath());
 			f.delete();
-			throw new StatusException("80002", "获取模板到本地失败");
-		} else {
-			try {
-				FileDisposeUtil.unZipFiles(localFilePath, directory.getAbsolutePath());
-				f.delete();
-			} catch (IOException e) {
-				throw new StatusException("80003", "解压模板到本地失败");
-			}
+		} catch (IOException e) {
+			throw new StatusException("80003", "解压模板到本地失败");
 		}
 	}
-}
+
+}

+ 11 - 7
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportThemisPaperServiceImpl.java

@@ -11,6 +11,8 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.jsoup.Jsoup;
@@ -52,7 +54,6 @@ import cn.com.qmth.examcloud.core.questions.service.themispaper.ThemisPaperDetai
 import cn.com.qmth.examcloud.core.questions.service.themispaper.ThemisQuestion;
 import cn.com.qmth.examcloud.core.questions.service.themispaper.ThemisSection;
 import cn.com.qmth.examcloud.core.questions.service.themispaper.ThemisSections;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 
 @Service("exportThemisPaperService")
 public class ExportThemisPaperServiceImpl implements ExportThemisPaperService {
@@ -64,6 +65,7 @@ public class ExportThemisPaperServiceImpl implements ExportThemisPaperService {
 
 	@Autowired
 	private PaperDetailService paperDetailService;
+
 	@Autowired
 	private QuestionAudioRepo questionAudioRepo;
 
@@ -98,9 +100,10 @@ public class ExportThemisPaperServiceImpl implements ExportThemisPaperService {
 										String audioFileName = questionAudio.getId() + "."
 												+ questionAudio.getFileSuffixes();
 										File file = new File(attDirectory + audioFileName);
-										// 通用存储
-										FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(questionAudio.getFileUrl()),
-												file);
+
+										String filePath = FssHelper.fixFilePath(questionAudio.getFileUrl());
+										FssFactory.getInstance().readFile(filePath, file);
+
 										count++;
 //										bodyNum++;
 									}
@@ -128,9 +131,10 @@ public class ExportThemisPaperServiceImpl implements ExportThemisPaperService {
 													String audioFileName = questionAudio.getId() + "."
 															+ questionAudio.getFileSuffixes();
 													File file = new File(attDirectory + audioFileName);
-													// 通用存储
-													FileStorageUtil.saveUrlAs(
-															FileStorageUtil.realPath(questionAudio.getFileUrl()), file);
+
+													String filePath = FssHelper.fixFilePath(questionAudio.getFileUrl());
+													FssFactory.getInstance().readFile(filePath, file);
+
 													count++;
 //													optionNum++;
 												}

+ 8 - 7
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigFileServiceImpl.java

@@ -13,6 +13,8 @@ import java.util.Set;
 
 import javax.servlet.http.HttpServletResponse;
 
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -63,7 +65,6 @@ import cn.com.qmth.examcloud.examwork.api.ExamCloudService;
 import cn.com.qmth.examcloud.examwork.api.bean.ExamCourseRelationBean;
 import cn.com.qmth.examcloud.examwork.api.request.GetExamCourseListReq;
 import cn.com.qmth.examcloud.examwork.api.response.GetExamCourseListResp;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -228,8 +229,9 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 				for (int i = 0; i < examFiles.size(); i++) {
 					ExamFile examFile = examFiles.get(i);
 					File file = new File(downloadDir + File.separator + examFile.getFileName());
-					// 通用存储
-					FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(examFile.getFilePath()), file);
+
+					String filePath = FssHelper.fixFilePath(examFile.getFilePath());
+					FssFactory.getInstance().readFile(filePath, file);
 
 					if (examFile.getExamFileType() == ExamFileType.PAPER) {
 						if(StringUtils.isBlank(examFile.getPaperId())) {
@@ -282,11 +284,10 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
 							for (QuestionAudio audio : questionAudios) {
 								String audioFileName = audio.getId() + "_"
 										+ exportPaperAbstractService.getAudioFileName(audio, unit, paperDetailExp);
-//                                UpYun upyun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
 								File file = new File(downloadDir + File.separator + audioFileName);
-//                                upyun.readFile(audio.getFileUrl(), file);
-								// 通用存储
-								FileStorageUtil.saveUrlAs(FileStorageUtil.realPath(audio.getFileUrl()), file);
+
+								String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+								FssFactory.getInstance().readFile(filePath, file);
 							}
 						}
 					}

+ 3 - 4
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigProviderServiceImpl.java

@@ -20,7 +20,7 @@ import cn.com.qmth.examcloud.support.cache.CacheHelper;
 import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigCacheBean;
 import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigDetailCacheBean;
 import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigPaperCacheBean;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -529,9 +529,8 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
                     String questionAudioId = matchAudioName(containAStr, "a", "id");
                     QuestionAudio questionAudio = questionAudioService.findAudioById(questionAudioId);
                     if (questionAudio != null) {
-                        // String url = sysProperty.getDomain() + questionAudio.getFileUrl();
-                        // 通用存储
-                        String url = FileStorageUtil.realPath(questionAudio.getFileUrl());
+                        String url = FssHelper.finalFileUrl(questionAudio.getFileUrl());
+
                         if (playTime != null) {
                             containAStr += " question-audio url=\"" + url + "\" playTime=\"" + playTime + "\""
                                     + "></a>";

+ 3 - 4
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigServiceImpl.java

@@ -36,7 +36,7 @@ import cn.com.qmth.examcloud.examwork.api.response.GetExamCourseListResp;
 import cn.com.qmth.examcloud.examwork.api.response.GetExamCourseResp;
 import cn.com.qmth.examcloud.examwork.api.response.GetExamResp;
 import cn.com.qmth.examcloud.support.CacheConstants;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -1036,9 +1036,8 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
                     String questionAudioId = matchAudioName(containAStr, "a", "id");
                     QuestionAudio questionAudio = questionAudioService.findAudioById(questionAudioId);
                     if (questionAudio != null) {
-                        //                        String url = sysProperty.getDomain() + questionAudio.getFileUrl();
-                        // 通用存储
-                        String url = FileStorageUtil.realPath(questionAudio.getFileUrl());
+                        String url = FssHelper.finalFileUrl(questionAudio.getFileUrl());
+
                         if (questionDto.getPlayTime() != null) {
                             containAStr += " question-audio url=\"" + url + "\" playTime=\"" + questionDto.getPlayTime()
                                     + "\"" + "></a>";

+ 6 - 53
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java

@@ -1,11 +1,7 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
-import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -24,6 +20,9 @@ import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import cn.com.qmth.examcloud.core.questions.base.*;
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.model.FssFileInfo;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.ArrayUtils;
@@ -65,10 +64,6 @@ import cn.com.qmth.examcloud.core.print.api.CoursePaperCloudService;
 import cn.com.qmth.examcloud.core.print.api.bean.SyncCoursePaperBean;
 import cn.com.qmth.examcloud.core.print.api.request.SyncCoursePaperReq;
 import cn.com.qmth.examcloud.core.print.api.response.SyncCoursePaperResp;
-import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
-import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
-import cn.com.qmth.examcloud.core.questions.base.IoUtils;
-import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.converter.utils.FileUtil;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperSeqMode;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperStatus;
@@ -120,10 +115,7 @@ import cn.com.qmth.examcloud.core.questions.service.export.ExportPaperAbstractSe
 import cn.com.qmth.examcloud.core.questions.service.util.PaperUtil;
 import cn.com.qmth.examcloud.reports.commons.bean.AdminOperateReport;
 import cn.com.qmth.examcloud.reports.commons.util.ReportsUtil;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 import cn.com.qmth.examcloud.web.config.SystemProperties;
-import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
-import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 import cn.com.qmth.examcloud.web.support.SpringContextHolder;
 
 /**
@@ -1648,59 +1640,20 @@ public class PaperServiceImpl implements PaperService {
 	 * 上传音频文件至又拍云
 	 */
 	private void uploadAudioFile(String paperId, String questionId, MultipartFile file, User user) {
-		// 文件夹不存在则新建
-		final String mp3DirectoryPath = TEMP_FILE_EXP + File.separator + paperId;
-		File mp3Directory = new File(mp3DirectoryPath);
-		if (!mp3Directory.exists()) {
-			mp3Directory.mkdirs();
-		}
-
 		// 文件名包含随机数,防止缓存
 		int randomNumber = random.nextInt(1000);
 		final String mp3FileName = questionId + "_" + randomNumber + "_" + file.getOriginalFilename();
-		File mp3File = new File(mp3DirectoryPath + File.separator + mp3FileName);
 
-		FileOutputStream outputStream;
 		try {
-			outputStream = new FileOutputStream(mp3File);
-		} catch (FileNotFoundException e) {
-			LOG.error(e.getMessage(), e);
-			throw new StatusException("500", "音频文件处理失败!");
-		}
-
-		try (InputStream is = file.getInputStream();
-				BufferedInputStream bis = new BufferedInputStream(is, 1024 * 10);) {
-			int read;
-			byte[] bytes = new byte[1024 * 4];
-			while ((read = bis.read(bytes, 0, 1024 * 4)) != -1) {
-				outputStream.write(bytes, 0, read);
-			}
-
-			// 上传到又拍云
-			// UpYun upYun = new UpYun(sysProperty.getBucketName(),
-			// sysProperty.getUserName(), sysProperty.getPassword());
-			// upYun.writeFile(sysProperty.getRadioUploadPath() + mp3FileName, mp3File,
-			// true);
-			// 通用存储
-			FileStoragePathEnvInfo env = new FileStoragePathEnvInfo();
-			env.setRelativePath(sysProperty.getRadioUploadPath() + mp3FileName);
-			YunPathInfo pi = FileStorageUtil.saveFile("audioFile", env, mp3File, null);
-			IoUtils.removeFile(mp3File);
+			String audioFilePath = String.format(FileConstants.RADIO_UPLOAD_PATH, mp3FileName);
+			FssFileInfo result = FssFactory.getInstance().writeFile(audioFilePath, file.getBytes(), null);
 
 			// 保存记录
-			QuestionAudio audio = new QuestionAudio(questionId, file.getOriginalFilename(), pi.getRelativePath());
+			QuestionAudio audio = new QuestionAudio(questionId, file.getOriginalFilename(), result.getFilePath());
 			questionAudioService.saveQuestionAudio(audio, user);
 		} catch (Exception e) {
 			LOG.error(e.getMessage(), e);
 			throw new StatusException("500", "音频文件保存失败!");
-		} finally {
-			try {
-				if (outputStream != null) {
-					outputStream.close();
-				}
-			} catch (IOException e) {
-				// ignore
-			}
 		}
 	}
 

+ 14 - 23
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuestionAudioServiceImpl.java

@@ -10,6 +10,8 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import cn.com.qmth.examcloud.support.fss.FssFactory;
+import cn.com.qmth.examcloud.support.fss.FssHelper;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +25,6 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.QuesOption;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 
 /**
  * @author chenken
@@ -37,22 +38,14 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
     @Autowired
     private QuestionAudioRepo questionAudioRepo;
 
-//    @Autowired
-//    private QuesRepo quesRepo;
-//
-//    @Autowired
-//    private SysProperty sysProperty;
-
     @Override
     public void saveQuestionAudio(QuestionAudio questionAudio, User user) {
         QuestionAudio existQuestionAudio = this.findByQuestionIdAndFileName(questionAudio.getQuestionId(), questionAudio.getFileName());
         if (existQuestionAudio != null) {
             questionAudio.setId(existQuestionAudio.getId());
 
-//            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//            upYun.deleteFile(existQuestionAudio.getFileUrl());
-        	//通用存储
-            FileStorageUtil.deleteFile(existQuestionAudio.getFileUrl());
+            String filePath = FssHelper.fixFilePath(existQuestionAudio.getFileUrl());
+            FssFactory.getInstance().deleteFile(filePath);
 
             questionAudioRepo.delete(existQuestionAudio);
         }
@@ -113,10 +106,10 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
             while (audioIterator.hasNext()) {
                 QuestionAudio audio = audioIterator.next();
                 if (!questionBodyAndOptionStr.contains(audio.getFileName())) {
-//                    UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//                    upYun.deleteFile(audio.getFileUrl());
-                	//通用存储
-                    FileStorageUtil.deleteFile(audio.getFileUrl());
+
+                    String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+                    FssFactory.getInstance().deleteFile(filePath);
+
                     questionAudioRepo.delete(audio);
                 }
             }
@@ -201,10 +194,9 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
         Iterator<QuestionAudio> audioIterator = questionAudios.iterator();
         while (audioIterator.hasNext()) {
             QuestionAudio audio = audioIterator.next();
-//            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//            upYun.deleteFile(audio.getFileUrl());
-        	//通用存储
-            FileStorageUtil.deleteFile(audio.getFileUrl());
+
+            String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+            FssFactory.getInstance().deleteFile(filePath);
         }
         questionAudioRepo.deleteAll(questionAudios);
     }
@@ -218,10 +210,9 @@ public class QuestionAudioServiceImpl implements QuestionAudioService {
         Iterator<QuestionAudio> audioIterator = questionAudios.iterator();
         while (audioIterator.hasNext()) {
             QuestionAudio audio = audioIterator.next();
-//            UpYun upYun = new UpYun(sysProperty.getBucketName(), sysProperty.getUserName(), sysProperty.getPassword());
-//            upYun.deleteFile(audio.getFileUrl());
-        	//通用存储
-            FileStorageUtil.deleteFile(audio.getFileUrl());
+
+            String filePath = FssHelper.fixFilePath(audio.getFileUrl());
+            FssFactory.getInstance().deleteFile(filePath);
         }
         questionAudioRepo.deleteAll(questionAudios);
     }

+ 6 - 4
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/util/ExportPaperUtil.java

@@ -17,6 +17,7 @@ import java.util.regex.Pattern;
 
 import javax.imageio.ImageIO;
 
+import cn.com.qmth.examcloud.support.util.FileUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -44,7 +45,6 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import sun.misc.BASE64Decoder;
@@ -491,13 +491,15 @@ public class ExportPaperUtil {
             File file = new File(docxTargetDir.getAbsolutePath() + "/word/media/image" + se.getParam().getIndex() + "."
                     + se.getParam().getType());
             String src = se.getValue();
-            if (src.contains("data:image")) {//base64图片
+            if (src.contains("data:image")) {
+                //base64图片
             	src = src.substring(src.indexOf(",") + 1);
                 BASE64Decoder decoder = new BASE64Decoder();
                 byte[] bytes = decoder.decodeBuffer(src);
                 FileUtils.writeByteArrayToFile(file, bytes);
-            }else {//网络图片
-            	FileStorageUtil.saveUrlAs(src, file);
+            }else {
+                //网络图片URL
+                FileUtil.saveUrlAs(src, file);
             }
         }
     }

+ 0 - 4
examcloud-core-questions-starter/src/main/java/cn/com/qmth/examcloud/core/questions/starter/CoreQuestionApp.java

@@ -1,6 +1,5 @@
 package cn.com.qmth.examcloud.core.questions.starter;
 
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
@@ -43,9 +42,6 @@ public class CoreQuestionApp {
     public static void main(String[] args) {
         // AppBootstrap.run(CoreQuestionApp.class, args);
         SpringApplication.run(CoreQuestionApp.class, args);
-
-        FileStorageUtil.initYunSite();
-        FileStorageUtil.initYunClient();
     }
 
     @Bean(name = "multipartResolver")