瀏覽代碼

美术阅卷10月新增需求-新增图片加密配置

wangliang 5 年之前
父節點
當前提交
c687bfa1da

+ 22 - 8
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ScoreApi.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.ms.admin.api;
 import cn.com.qmth.stmms.ms.admin.assembler.ScoreAssembler;
 import cn.com.qmth.stmms.ms.admin.dto.ScoreCheckDTO;
 import cn.com.qmth.stmms.ms.admin.utils.WaterMarkUtils;
+import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
 import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
@@ -62,6 +63,9 @@ public class ScoreApi {
     @Autowired
     private PaperAssembler paperAssembler;
 
+    @Autowired
+    ImageConfig imageConfig;
+
     /**
      * 查询
      *
@@ -237,7 +241,6 @@ public class ScoreApi {
 
     @PostMapping("/watermark")
     public void watermark(@RequestParam("workId") Long workId) {
-        watermarking = false;
         if (!watermarking) {
             watermarking = true;
             watermarkTotal = 0;
@@ -260,20 +263,31 @@ public class ScoreApi {
                     String examNumber = paper.getExamNumber();
                     String areaCode = paper.getAreaCode();
                     Subject subject = paper.getSubject();
-                    Student student = studentRepo.findByWorkIdAndExamNumber(workId, examNumber);
-                    String imageMd5 = MD5Util.getImageRuleMd5(workId, subject.ordinal(), areaCode, examNumber, student.getId());
-
-                    String imageFile = imagePath + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + imageMd5;
-                    String watermarkFile = watermark + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + imageMd5;
 
+                    String imageFile = null;
+                    String watermarkFile = null;
+                    String imageMd5 = null;
+                    if (imageConfig.isImageEnc()) {
+                        Student student = studentRepo.findByWorkIdAndExamNumber(workId, examNumber);
+                        imageMd5 = MD5Util.getImageRuleMd5(workId, subject.ordinal(), areaCode, examNumber, student.getId());
+
+                        imageFile = imagePath + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + imageMd5;
+                        watermarkFile = watermark + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + imageMd5;
+                    } else {
+                        imageFile = imagePath + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + examNumber + ".jpg";
+                        watermarkFile = watermark + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + examNumber + ".jpg";
+                    }
                     File targetFile = new File(watermarkFile);
                     targetFile.getParentFile().mkdirs();//创建父级目录
                     String txt = "【" + paper.getExamNumber() + "】【" + paper.getStudentName() + "】【" + String.valueOf(score.intValue()) + "分】";
                     String text = new String(txt.getBytes(), Charset.forName("UTF-8"));
 //                    WaterMarkUtils.addWaterMark(imageFile, watermarkFile, text, color, font);
                     try {
-//                        WaterMarkUtils.addTextWatermark(text, "jpg", imageFile, watermarkFile);
-                        WaterMarkUtils.addTextWatermarkNew(imageMd5, text, "jpg", imageFile, watermarkFile);
+                        if (imageConfig.isImageEnc()) {
+                            WaterMarkUtils.addTextWatermark(text, "jpg", imageFile, watermarkFile);
+                        } else {
+                            WaterMarkUtils.addTextWatermarkNew(imageMd5, text, "jpg", imageFile, watermarkFile);
+                        }
                         System.out.println(watermarkFile + "生成成功");
                     } catch (IOException e) {
                         System.out.println(watermarkFile + "生成失败");

+ 96 - 52
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.admin.service;
 
 import cn.com.qmth.stmms.ms.admin.dto.StudentDTO;
 import cn.com.qmth.stmms.ms.commons.config.ImageCompressionConfig;
+import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
 import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
 import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
 import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
@@ -58,7 +59,8 @@ public class DataUploadService {
     @Autowired
     private MarkTaskRepo markTaskRepo;
 
-    File srcFile = new File("/Users/king/stmms-ms/static/images/6/SM/1/1901040150.jpg"); //初始文件
+    @Autowired
+    ImageConfig imageConfig;
 
     /**
      * 上传考生试卷数据
@@ -76,61 +78,94 @@ public class DataUploadService {
         OutputStream outputStream = null;
         OutputStream outputStreamTemp = null;
         try {
+            FileInputStream sheetIn = null;
+            FileInputStream slicein = null;
             Student student = studentRepo.findOne(studentId);
-            //保存裁切原图+文件名加密
-            String imageDir = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
-                    + File.separator + student.getAreaCode();
-            File out = new File(imageDir);
-            if (!out.exists()) {
-                out.mkdirs();
-            }
+            if (imageConfig.isImageEnc()) {
+                //保存裁切原图+文件名加密
+                String imageDir = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
+                        + File.separator + student.getAreaCode();
+                File out = new File(imageDir);
+                if (!out.exists()) {
+                    out.mkdirs();
+                }
 
-            String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
-            File imageFile = new File(imageDir + File.separator + imageMd5 + ".jpg");
-            File imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
-            LOGGER.info("image存放目录:{}", imageFile.getPath());
-            outputStream = new FileOutputStream(imageFile);
-            outputStreamTemp = new FileOutputStream(imageFileTemp);
-            int index = 0;
-            byte[] bytes = new byte[1024];
-            byte[] bytesEnc = new byte[1024];
-            while ((index = in.read(bytes)) != -1) {
-                //将字节数组的数据全部写入到输出流中
-                for (int i = 0; i < index; i++) {
-                    //通过异或运算加密
-                    bytesEnc[i] = (byte) (bytes[i] ^ SystemConstant.SECRET_KEY);
+                String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
+                File imageFile = new File(imageDir + File.separator + imageMd5 + ".jpg");
+                File imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
+                LOGGER.info("image存放目录:{}", imageFile.getPath());
+                outputStream = new FileOutputStream(imageFile);
+                outputStreamTemp = new FileOutputStream(imageFileTemp);
+                int index = 0;
+                byte[] bytes = new byte[1024];
+                byte[] bytesEnc = new byte[1024];
+                while ((index = in.read(bytes)) != -1) {
+                    //将字节数组的数据全部写入到输出流中
+                    for (int i = 0; i < index; i++) {
+                        //通过异或运算加密
+                        bytesEnc[i] = (byte) (bytes[i] ^ SystemConstant.SECRET_KEY);
+                    }
+                    outputStream.write(bytesEnc, 0, index);
+                    outputStreamTemp.write(bytes, 0, index);
                 }
-                outputStream.write(bytesEnc, 0, index);
-                outputStreamTemp.write(bytes, 0, index);
-            }
 
-            //生成缩略图
-            String thumbDir = systemConfig.getThumbDir() + File.separator + student.getWorkId() + File.separator + subject
-                    + File.separator + student.getAreaCode();
-            File thumb = new File(thumbDir);
-            if (!thumb.exists()) {
-                thumb.mkdirs();
-            }
+                //生成缩略图
+                String thumbDir = systemConfig.getThumbDir() + File.separator + student.getWorkId() + File.separator + subject
+                        + File.separator + student.getAreaCode();
+                File thumb = new File(thumbDir);
+                if (!thumb.exists()) {
+                    thumb.mkdirs();
+                }
+
+                BufferedImage bufferedImage = ImageCompression.compress(imageFileTemp, compressionConfig);
+                File thumbFile = new File(thumbDir + File.separator + imageMd5 + ".jpg");
+                LOGGER.info("thumb存放目录:{}", thumbFile.getPath());
+                outputStream = new FileOutputStream(thumbFile);
+                ByteArrayOutputStream os = new ByteArrayOutputStream();
+                ImageIO.write(bufferedImage, "jpg", os);
+                in = new ByteArrayInputStream(os.toByteArray());
 
-            BufferedImage bufferedImage = ImageCompression.compress(imageFileTemp, compressionConfig);
-            File thumbFile = new File(thumbDir + File.separator + imageMd5 + ".jpg");
-            LOGGER.info("thumb存放目录:{}", thumbFile.getPath());
-            outputStream = new FileOutputStream(thumbFile);
-            ByteArrayOutputStream os = new ByteArrayOutputStream();
-            ImageIO.write(bufferedImage, "jpg", os);
-            in = new ByteArrayInputStream(os.toByteArray());
+                //原图删除
+                imageFileTemp.delete();
+                writeStream(in, outputStream);
+                long end = System.currentTimeMillis();
+                LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
 
-            //原图删除
-            imageFileTemp.delete();
-            writeStream(in, outputStream);
-            long end = System.currentTimeMillis();
-            LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
+                sheetIn = new FileInputStream(imageFile.getPath());
+                slicein = new FileInputStream(thumbFile.getPath());
+            } else {
+                String savePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
+                        + File.separator + student.getAreaCode();
+                File out = new File(savePath);
+                if (!out.exists()) {
+                    out.mkdirs();
+                }
+                File outFile = new File(savePath + File.separator + student.getExamNumber() + ".jpg");
+                if (!outFile.exists()) {
+                    outFile.createNewFile();
+                }
+                OutputStream output = new FileOutputStream(outFile);
+                byte[] buffer = new byte[in.available()];
+                in.read(buffer);
+                output.write(buffer);
+                output.close();
+
+                // 生成缩略图
+                String thumbDir = systemConfig.getThumbDir() + File.separator + student.getWorkId() + File.separator + subject
+                        + File.separator + student.getAreaCode();
+                File thumb = new File(thumbDir);
+                if (!thumb.exists()) {
+                    thumb.mkdirs();
+                }
+                BufferedImage bufferedImage = ImageCompression.compress(outFile, compressionConfig);
+                String thumbFileName = thumbDir + File.separator + student.getExamNumber() + ".jpg";
+                ImageIO.write(bufferedImage, "jpg", new File(thumbFileName));
 
+                sheetIn = new FileInputStream(savePath + File.separator + student.getExamNumber() + ".jpg");
+                slicein = new FileInputStream(thumbFileName);
+            }
             Paper exist = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject,
                     student.getExamNumber());
-
-            FileInputStream sheetIn = new FileInputStream(imageFile.getPath());
-            FileInputStream slicein = new FileInputStream(thumbFile.getPath());
             String sheetMD5 = DigestUtils.md5Hex(sheetIn);
             String sliceMD5 = DigestUtils.md5Hex(slicein);
             sheetIn.close();
@@ -276,11 +311,20 @@ public class DataUploadService {
         paper.setUploadedOn(new Date());
         paper.setManual(isManual);
 
-        String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
-        String sheetPath = systemConfig.getSheetDir() + File.separator + student.getWorkId() + File.separator + subject
-                + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
-        String slicePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
-                + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
+        String sheetPath = null;
+        String slicePath = null;
+        if (imageConfig.isImageEnc()) {
+            String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
+            sheetPath = systemConfig.getSheetDir() + File.separator + student.getWorkId() + File.separator + subject
+                    + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
+            slicePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
+                    + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
+        } else {
+            sheetPath = systemConfig.getSheetDir() + File.separator + student.getWorkId() + File.separator + subject
+                    + File.separator + student.getAreaCode() + File.separator + student.getExamNumber() + ".jpg";
+            slicePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
+                    + File.separator + student.getAreaCode() + File.separator + student.getExamNumber() + ".jpg";
+        }
         FileInputStream sheetIn = new FileInputStream(sheetPath);
         FileInputStream slicein = new FileInputStream(slicePath);
         String sheetMD5 = DigestUtils.md5Hex(sheetIn);

+ 18 - 18
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/CollectApi.java

@@ -141,7 +141,7 @@ public class CollectApi {
         return list;
     }
 
-    File srcFile = new File("/Users/king/stmms-ms/static/images/1/SM/1/1901130045.jpg"); //初始文件
+//    File srcFile = new File("/Users/king/stmms-ms/static/images/1/SM/1/1901130045.jpg"); //初始文件
 
     /**
      * 上传原图(图片加密)
@@ -162,8 +162,8 @@ public class CollectApi {
         InputStream inputStream = null;
         OutputStream outputStream = null;
         try {
-//            inputStream = request.getInputStream();
-            inputStream = new FileInputStream(srcFile);
+            inputStream = request.getInputStream();
+//            inputStream = new FileInputStream(srcFile);
             Student student = studentRepo.findByWorkIdAndExamNumber(workId, fileName);
             Subject subject = Subject.values()[subjectId - 1];
 
@@ -183,12 +183,12 @@ public class CollectApi {
             long end = System.currentTimeMillis();
             LOGGER.info("生成原图耗时:{}", (end - start) / 1000 + "s");
 
-//            String md5 = request.getHeader("md5");
-//            in = new FileInputStream(imageFile);
-//            String sheetMD5 = DigestUtils.md5Hex(in);
-//            if (!md5.equalsIgnoreCase(sheetMD5)) {
-//                throw new Exception("图片md5值不一致");
-//            }
+            String md5 = request.getHeader("md5");
+            FileInputStream in = new FileInputStream(sheetFile);
+            String sheetMD5 = DigestUtils.md5Hex(in);
+            if (!md5.equalsIgnoreCase(sheetMD5)) {
+                throw new Exception("图片md5值不一致");
+            }
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
@@ -222,8 +222,8 @@ public class CollectApi {
         OutputStream outputStream = null;
         OutputStream outputStreamTemp = null;
         try {
-//            inputStream = request.getInputStream();
-            inputStream = new FileInputStream(srcFile);
+            inputStream = request.getInputStream();
+//            inputStream = new FileInputStream(srcFile);
             Student student = studentRepo.findByWorkIdAndExamNumber(workId, fileName);
             Subject subject = Subject.values()[subjectId - 1];
             //保存裁切原图+文件名加密
@@ -274,19 +274,19 @@ public class CollectApi {
 
             //原图删除
             imageFileTemp.delete();
-//            inputStream = PictureUtil.getInput(thumbFileTemp);
+//            inputStream = new FileInputStream(thumbFileTemp);
             //缩略图删除
 //            thumbFileTemp.delete();
             SystemConstant.writeStream(inputStream, outputStream);
             long end = System.currentTimeMillis();
             LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
 
-//            String md5 = request.getHeader("md5");
-//            FileInputStream in = new FileInputStream(imageFile);
-//            String sliceMD5 = DigestUtils.md5Hex(in);
-//            if (!md5.equalsIgnoreCase(sliceMD5)) {
-//                throw new Exception("图片md5值不一致");
-//            }
+            String md5 = request.getHeader("md5");
+            FileInputStream in = new FileInputStream(imageFile);
+            String sliceMD5 = DigestUtils.md5Hex(in);
+            if (!md5.equalsIgnoreCase(sliceMD5)) {
+                throw new Exception("图片md5值不一致");
+            }
         } catch (Exception e) {
             e.printStackTrace();
         } finally {