Explorar el Código

增加兼容老版本的文件下载接口,支持重定向与直接下载两种模式

luoshi hace 4 años
padre
commit
4ce6ec63dd

+ 6 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/file/service/FileService.java

@@ -9,6 +9,12 @@ public interface FileService {
 
     String getFileServer();
 
+    byte[] downloadSheet(int examId, String examNumber, int index) throws Exception;
+
+    byte[] downloadSlice(int examId, String secretNumber, int index) throws Exception;
+
+    byte[] downloadPackage(int examId, String packageCode, int index) throws Exception;
+
     void uploadSheet(InputStream ins, String md5, int examId, String examNumber, int index) throws Exception;
 
     void uploadSlice(InputStream ins, String md5, int examId, String secretNumber, int index) throws Exception;

+ 15 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/file/service/impl/FileServiceImpl.java

@@ -61,6 +61,21 @@ public class FileServiceImpl implements FileService, InitializingBean {
         this.fileStore = fileStore;
     }
 
+    @Override
+    public byte[] downloadSheet(int examId, String examNumber, int index) throws Exception {
+        return store.read(getSheetUri(examId, examNumber, index));
+    }
+
+    @Override
+    public byte[] downloadSlice(int examId, String secretNumber, int index) throws Exception {
+        return store.read(getSliceUri(examId, secretNumber, index));
+    }
+
+    @Override
+    public byte[] downloadPackage(int examId, String packageCode, int index) throws Exception {
+        return store.read(getPackageUri(examId, packageCode, index));
+    }
+
     @Override
     public void uploadSheet(InputStream ins, String md5, int examId, String examNumber, int index) throws Exception {
         store.write(getSheetUri(examId, examNumber, index), ins, md5);
@@ -88,7 +103,6 @@ public class FileServiceImpl implements FileService, InitializingBean {
             throw new RuntimeException("format type invalid");
         }
         store.write(getPaperUri(examId, subjectCode, type), ins, md5);
-
     }
 
     @Override

+ 84 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/monitor/FileDownloadController.java

@@ -0,0 +1,84 @@
+package cn.com.qmth.stmms.monitor;
+
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.file.service.FileService;
+import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+
+/**
+ * 兼容老版本的文件下载接口
+ */
+@Controller("fileDownloadController")
+@RequestMapping("/file")
+public class FileDownloadController {
+
+    @Autowired
+    private FileService fileService;
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @RequestMapping("/ft-sheet/{examId}-{campusId}/{subjectCode}/{examNumber}-{index}.jpg")
+    public void getSheet(HttpServletResponse response, @PathVariable Integer examId, @PathVariable Integer campusId,
+            @PathVariable String subjectCode, @PathVariable String examNumber, @PathVariable Integer index)
+            throws Exception {
+        try {
+            //重定向模式
+            redirect(response, fileService.getFileServer().concat(fileService.getSheetUri(examId, examNumber, index)));
+            //直接下载模式
+            //download(response, fileService.downloadSheet(examId, examNumber, index));
+        } catch (Exception e) {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+        }
+    }
+
+    @RequestMapping("/ft-slice/{examId}-{campusId}/{subjectCode}/{examNumber}-{index}.jpg")
+    public void getSlice(HttpServletResponse response, @PathVariable Integer examId, @PathVariable Integer campusId,
+            @PathVariable String subjectCode, @PathVariable String examNumber, @PathVariable Integer index)
+            throws Exception {
+        try {
+            ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
+            if (student != null) {
+                //重定向模式
+                redirect(response, fileService.getFileServer()
+                        .concat(fileService.getSliceUri(examId, student.getSecretNumber(), index)));
+                //直接下载模式
+                //download(response, fileService.downloadSlice(examId, student.getSecretNumber(), index));
+            } else {
+                response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            }
+        } catch (Exception e) {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+        }
+    }
+
+    @RequestMapping("/ft-package/{examId}/{packageCode}/{index}.jpg")
+    public void getPackage(HttpServletResponse response, @PathVariable Integer examId, @PathVariable String packageCode,
+            @PathVariable Integer index) throws Exception {
+        try {
+            //重定向模式
+            redirect(response,
+                    fileService.getFileServer().concat(fileService.getPackageUri(examId, packageCode, index)));
+            //直接下载模式
+            //download(response, fileService.downloadPackage(examId, packageCode, index));
+        } catch (Exception e) {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+        }
+    }
+
+    private void redirect(HttpServletResponse response, String url) throws Exception {
+        response.sendRedirect(url);
+    }
+
+    private void download(HttpServletResponse response, byte[] data) throws Exception {
+        IOUtils.copy(new ByteArrayInputStream(data), response.getOutputStream());
+    }
+
+}