소스 검색

oss水印图片修改

wangliang 5 년 전
부모
커밋
2ac6eaae60

+ 43 - 4
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ScoreApi.java

@@ -3,8 +3,11 @@ 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.AliYunOssConfig;
 import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
+import cn.com.qmth.stmms.ms.commons.config.ImageServerConfig;
 import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
+import cn.com.qmth.stmms.ms.commons.utils.OssUtil;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
@@ -28,9 +31,11 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.persistence.criteria.Predicate;
 import java.awt.*;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.nio.charset.Charset;
 import java.util.*;
@@ -66,6 +71,15 @@ public class ScoreApi {
     @Autowired
     ImageConfig imageConfig;
 
+    @Resource
+    OssUtil ossUtil;
+
+    @Resource
+    AliYunOssConfig aliYunOssConfig;
+
+    @Resource
+    ImageServerConfig imageServerConfig;
+
     /**
      * 查询
      *
@@ -267,6 +281,7 @@ public class ScoreApi {
                     String imageFile = null;
                     String watermarkFile = null;
                     String imageMd5 = null;
+                    StringJoiner watermarkSj = null;
                     if (imageConfig.isImageEnc()) {
                         Student student = studentRepo.findByWorkIdAndExamNumber(workId, examNumber);
                         imageMd5 = MD5Util.getImageRuleMd5(workId, subject.ordinal(), areaCode, examNumber, student.getId());
@@ -274,8 +289,26 @@ public class ScoreApi {
                         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";
+                        if (imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
+                            //阿里云oss图片加水印
+                            String imageDirName = aliYunOssConfig.getImageDir();
+                            String watermarkDirName = aliYunOssConfig.getWatermark();
+                            imageDirName = imageDirName.substring(imageDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), imageDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
+                            watermarkDirName = watermarkDirName.substring(watermarkDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), watermarkDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
+                            StringJoiner imageSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
+                            watermarkSj = new StringJoiner("").add(watermarkDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
+                            imageFile = imagePath + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + examNumber + ".jpg";
+                            watermarkFile = watermark + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + examNumber + ".jpg";
+                            try {
+                                ossUtil.ossDownload(imageSj.toString(), imageFile);
+                                ossUtil.ossDownload(watermarkSj.toString(), watermarkFile);
+                            } catch (IOException e) {
+                                e.printStackTrace();
+                            }
+                        } 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();//创建父级目录
@@ -284,13 +317,19 @@ public class ScoreApi {
 //                    WaterMarkUtils.addWaterMark(imageFile, watermarkFile, text, color, font);
                     try {
                         if (imageConfig.isImageEnc()) {
-                            WaterMarkUtils.addTextWatermark(text, "jpg", imageFile, watermarkFile);
-                        } else {
                             WaterMarkUtils.addTextWatermarkNew(imageMd5, text, "jpg", imageFile, watermarkFile);
+                        } else {
+                            File watermarkF = WaterMarkUtils.addTextWatermark(text, "jpg", imageFile, watermarkFile);
+                            if (imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
+                                ossUtil.ossUpload(watermarkSj.toString(), new FileInputStream(watermarkF));
+                                watermarkF.delete();
+                            }
                         }
                         System.out.println(watermarkFile + "生成成功");
                     } catch (IOException e) {
                         System.out.println(watermarkFile + "生成失败");
+                    } catch (Exception e) {
+                        e.printStackTrace();
                     }
 
                 }

+ 6 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/WaterMarkUtils.java

@@ -21,7 +21,9 @@ import java.util.Objects;
 public class WaterMarkUtils {
     private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(WaterMarkUtils.class);
 
-    public static void addTextWatermark(String text, String type, String sourcePath, String destinationPath) throws IOException {
+    public static File addTextWatermark(String text, String type, String sourcePath, String destinationPath) throws IOException {
+        long start = System.currentTimeMillis();
+        LOGGER.info("准备生成水印图:{}", start);
         File source = new File(sourcePath);
         File destination = new File(destinationPath);
         BufferedImage image = ImageIO.read(source);
@@ -75,6 +77,9 @@ public class WaterMarkUtils {
 //        encoder.encode(watermarked);
 //        fos.flush();
 //        fos.close();
+        long end = System.currentTimeMillis();
+        LOGGER.info("生成水印图耗时:{}", (end - start) / 1000 + "s");
+        return destination;
     }
 
 

+ 5 - 1
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/ImageApi.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.ms.collect.api;
 import cn.com.qmth.stmms.ms.collect.util.RotateTask;
 import cn.com.qmth.stmms.ms.commons.config.AliYunOssConfig;
 import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
+import cn.com.qmth.stmms.ms.commons.config.ImageServerConfig;
 import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
 import cn.com.qmth.stmms.ms.commons.utils.OssUtil;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
@@ -43,6 +44,9 @@ public class ImageApi {
     @Resource
     AliYunOssConfig aliYunOssConfig;
 
+    @Resource
+    ImageServerConfig imageServerConfig;
+
     private ExecutorService executor = Executors.newFixedThreadPool(10);
 
     private HashSet<String> papers = new HashSet<String>();
@@ -51,7 +55,7 @@ public class ImageApi {
     public ResponseEntity rotate(@PathVariable Long paperId, @RequestParam int degree) {
         Paper paper = paperRepo.findOne(paperId);
         if (!papers.contains(paper.getExamNumber())) {
-            executor.submit(new RotateTask(paper, degree, paperRepo, systemConfig, papers, imageConfig, studentRepo, ossUtil, aliYunOssConfig));
+            executor.submit(new RotateTask(paper, degree, paperRepo, systemConfig, papers, imageConfig, studentRepo, ossUtil, aliYunOssConfig, imageServerConfig));
             papers.add(paper.getExamNumber());
         }
         return new ResponseEntity(HttpStatus.OK);

+ 5 - 12
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/util/RotateTask.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.collect.util;
 
 import cn.com.qmth.stmms.ms.commons.config.AliYunOssConfig;
 import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
+import cn.com.qmth.stmms.ms.commons.config.ImageServerConfig;
 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;
@@ -30,8 +31,9 @@ public class RotateTask implements Runnable {
     private HashSet<String> papers;
     private OssUtil ossUtil;
     private AliYunOssConfig aliYunOssConfig;
+    private ImageServerConfig imageServerConfig;
 
-    public RotateTask(Paper paper, int degree, PaperRepo paperRepo, SystemConfig systemConfig, HashSet<String> papers, ImageConfig imageConfig, StudentRepo studentRepo, OssUtil ossUtil, AliYunOssConfig aliYunOssConfig) {
+    public RotateTask(Paper paper, int degree, PaperRepo paperRepo, SystemConfig systemConfig, HashSet<String> papers, ImageConfig imageConfig, StudentRepo studentRepo, OssUtil ossUtil, AliYunOssConfig aliYunOssConfig, ImageServerConfig imageServerConfig) {
         this.paper = paper;
         this.degree = degree;
         this.paperRepo = paperRepo;
@@ -41,6 +43,7 @@ public class RotateTask implements Runnable {
         this.studentRepo = studentRepo;
         this.ossUtil = ossUtil;
         this.aliYunOssConfig = aliYunOssConfig;
+        this.imageServerConfig = imageServerConfig;
     }
 
     @Override
@@ -123,18 +126,8 @@ public class RotateTask implements Runnable {
                     e.printStackTrace();
                 }
             } else {
-                if (imageConfig.isCustomSubject()) {
+                if (imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
                     //阿里云oss图片旋转
-                    File sheetMkdir = new File(systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode());
-                    if (!sheetMkdir.exists()) {
-                        sheetMkdir.mkdirs();
-                    }
-                    File imageMkdir = new File(systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode());
-                    if (!imageMkdir.exists()) {
-                        imageMkdir.mkdirs();
-                    }
                     String thumbDirName = aliYunOssConfig.getThumbDir();
                     String imageDirName = aliYunOssConfig.getImageDir();
                     thumbDirName = thumbDirName.substring(thumbDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), thumbDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");

+ 3 - 0
stmms-ms-commons/src/main/java/cn/com/qmth/stmms/ms/commons/utils/OssUtil.java

@@ -101,6 +101,9 @@ public class OssUtil {
         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
         // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
         File localFile = new File(localPath);
+        if (!localFile.getParentFile().exists()) {
+            localFile.getParentFile().mkdirs();
+        }
         ossClient.getObject(new GetObjectRequest(bucketName, objectName), localFile);
         // 关闭OSSClient。
         ossClient.shutdown();