From a7cf1913c376b53f487f0ef8dfff084c5bc010a7 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 17 十月 2026 11:19:12 +0800
Subject: [PATCH] feat(mes): 支持二维码导出任务的分段下载功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java
index 93bb1d1..9a30eb5 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java
@@ -9,6 +9,9 @@
 import lombok.extern.slf4j.Slf4j;
 
 import javax.imageio.ImageIO;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.ImageOutputStream;
+import javax.imageio.stream.MemoryCacheImageOutputStream;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.FontMetrics;
@@ -17,6 +20,7 @@
 import java.awt.RenderingHints;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
+import java.io.FilterOutputStream;
 import java.util.List;
 import java.util.Set;
 import java.util.zip.ZipEntry;
@@ -138,8 +142,24 @@
     public static void writeZipEntry(ZipOutputStream zip, QrLabelInfo label) throws IOException {
         BufferedImage image = createQrLabel(label.getCode(), label.getFileName());
         zip.putNextEntry(new ZipEntry(label.getFileName() + ".png"));
-        ImageIO.write(image, "png", zip);
-        zip.closeEntry();
+        try {
+            // ImageIO.write(OutputStream) 鍙兘涓烘瘡寮犲浘鐗囧垱寤虹鐩樼紦瀛橈紱澶ф壒閲忓鍑烘敼鐢ㄥ唴瀛樼紦瀛樸��
+            // 鍖呰娴佺殑 close 浠� flush锛屼笉鑳藉叧闂灞� ZIP銆�
+            ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
+            try (ImageOutputStream imageOut = new MemoryCacheImageOutputStream(new FilterOutputStream(zip) {
+                @Override
+                public void close() throws IOException {
+                    flush();
+                }
+            })) {
+                writer.setOutput(imageOut);
+                writer.write(image);
+            } finally {
+                writer.dispose();
+            }
+        } finally {
+            zip.closeEntry();
+        }
     }
 
     // ==================== 绉佹湁鏂规硶 ====================

--
Gitblit v1.9.3