Эх сурвалжийг харах

feat(game-event): 增强Logo上传验证和PDF生成容错性

- 添加Logo文件类型验证,确保仅接受图片格式- 支持可选Logo上传,不再强制要求提供Logo文件
- 在PDF生成过程中增加Logo添加的异常处理
- 记录Logo处理相关的调试和警告日志信息- 保留后续可启用的Logo文件大小限制逻辑
- 提升系统对无效或缺失Logo输入的健壮性
zhou 2 долоо хоног өмнө
parent
commit
e8065a0753

+ 1 - 1
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/controller/NumberController.java

@@ -58,7 +58,7 @@ public class NumberController {
     @PostMapping("/generateBib")
     public void generateNumberBib(HttpServletResponse response,
                                   @RequestPart("bgImage") MultipartFile bgImage,
-                                  @RequestPart(name = "logo") MultipartFile logo,
+                                  @RequestPart(name = "logo", required = false) MultipartFile logo,
                                   GenerateBibBo bibParam) {
         gameEventService.generateNumberBib(response, bgImage, logo, bibParam);
     }

+ 25 - 6
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/service/impl/GameEventServiceImpl.java

@@ -666,7 +666,21 @@ public class GameEventServiceImpl implements IGameEventService {
             backgroundImageBytes = backgroundImage.getBytes();
 
             if (logo != null && !logo.isEmpty()) {
+                // 验证logo文件类型
+                String contentType = logo.getContentType();
+                if (contentType == null || !contentType.startsWith("image/")) {
+                    throw new IllegalArgumentException("Logo文件必须是图片格式");
+                }
+
+                // 验证logo文件大小(例如限制为2MB)
+                // if (logo.getSize() > 2 * 1024 * 1024) {
+                //     throw new IllegalArgumentException("Logo文件大小不能超过2MB");
+                // }
+
                 logoImageBytes = logo.getBytes();
+//                log.info("Logo图片上传成功,大小: {} bytes", logoImageBytes.length);
+            } else {
+                log.info("未上传Logo图片,将跳过Logo处理");
             }
         } catch (IOException e) {
             throw new RuntimeException("读取上传文件失败", e);
@@ -717,12 +731,17 @@ public class GameEventServiceImpl implements IGameEventService {
 
                         // 添加 Logo(如果存在)
                         if (finalLogoImageBytes != null && logoX != null && logoY != null) {
-                            Image img = Image.getInstance(finalLogoImageBytes);
-                            img.scaleToFit(80, 80);
-                            float logoPositionX = logoX.floatValue();
-                            float logoPositionY = logoY.floatValue();
-                            img.setAbsolutePosition(logoPositionX, logoPositionY);
-                            cb.addImage(img);
+                            try {
+                                Image img = Image.getInstance(finalLogoImageBytes);
+                                img.scaleToFit(80, 80);
+                                float logoPositionX = logoX.floatValue();
+                                float logoPositionY = logoY.floatValue();
+                                img.setAbsolutePosition(logoPositionX, logoPositionY);
+                                cb.addImage(img);
+//                                log.debug("成功添加Logo到PDF");
+                            } catch (Exception e) {
+                                log.warn("添加Logo到PDF失败,跳过Logo处理: {}", e.getMessage());
+                            }
                         }
 
                         // 添加号码(居中)