Browse Source

线上版本-图片旋转优化-20201118

xiaof 4 years ago
parent
commit
31c90cd84c

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

@@ -64,7 +64,9 @@ public class ImageApi {
         RotateTask rotateTask = new RotateTask(paper, degree, paperRepo, systemConfig, papers, imageConfig, studentRepo, ossUtil, aliYunOssConfig, imageServerConfig);
         queue.offer(rotateTask);
         while (queue.size() > 0) {
-            executor.submit(queue.poll());
+            synchronized (paper.getId()) {
+                executor.submit(queue.poll());
+            }
         }
         return new ResponseEntity(HttpStatus.OK);
     }

+ 28 - 8
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/util/RotateTask.java

@@ -217,16 +217,26 @@ public class RotateTask implements Runnable {
                         File thumbFile = new File(thumbPath);
                         if (thumbFile.exists()) {
                             LOGGER.info("生成缩略图:原文件名{},重命名为新文件名开始", fileName);
-                            thumbFile.renameTo(new File(thumbNew));
+                            File thumbFileNew = new File(thumbNew);
+                            thumbFileNew.delete();
+                            thumbFile.renameTo(thumbFileNew);
                             LOGGER.info("生成缩略图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
-                            InputStream is = new FileInputStream(thumbNew);
-                            ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
+                            try {
+                                ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
+                            } catch (IOException e) {
+                                //旋转失败,还原图片
+                                LOGGER.info("生成缩略图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
+                                thumbFile.delete();
+                                new File(thumbNew).renameTo(thumbFile);
+                                LOGGER.info("生成缩略图:失败。原文件名{},还原结束", fileName);
+                            }
+
                             LOGGER.info("生成缩略图:原文件名{},旋转结束", fileName);
-                            is.close();
                         }
 
                         if (!thumbFile.exists()) {
                             LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                            thumbFile.delete();
                             new File(thumbNew).renameTo(thumbFile);
                             LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片结束", fileName);
                         } else {
@@ -238,15 +248,25 @@ public class RotateTask implements Runnable {
                         File imageFile = new File(imagePath);
                         if (imageFile.exists()) {
                             LOGGER.info("生成裁切图:原文件名{},重命名为新文件名开始", fileName);
-                            imageFile.renameTo(new File(imageNew));
+                            File imageFileNew = new File(imageNew);
+                            imageFileNew.delete();
+                            imageFile.renameTo(imageFileNew);
                             LOGGER.info("生成裁切图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
-                            InputStream is = new FileInputStream(imageNew);
-                            ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
+                            try {
+                                ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
+                            } catch (IOException e) {
+                                //旋转失败,还原图片
+                                LOGGER.info("生成裁切图:失败。原文件名{},还原开始,错误原因:{}", fileName, e.getMessage());
+                                imageFile.delete();
+                                new File(imageNew).renameTo(imageFile);
+                                LOGGER.info("生成裁切图:失败。原文件名{},还原结束", fileName);
+                            }
+
                             LOGGER.info("生成裁切图:原文件名{},旋转结束", fileName);
-                            is.close();
                         }
                         if (!imageFile.exists()) {
                             LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                            imageFile.delete();
                             new File(imageNew).renameTo(imageFile);
                             LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片结束", fileName);
                         } else {