From 07c6a93413b6ef22d34cc9cc98ef867fb513d9b2 Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Tue, 13 May 2025 13:40:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=90=A5=E5=85=BB=E7=A7=91=E6=99=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/common/utils/RichTextUtil.java | 58 +++++++++++++++++++ .../domain/HealthPopularScience.java | 5 ++ 2 files changed, 63 insertions(+) create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/utils/RichTextUtil.java diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/utils/RichTextUtil.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/utils/RichTextUtil.java new file mode 100644 index 0000000..f337fec --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/utils/RichTextUtil.java @@ -0,0 +1,58 @@ +package com.bonus.canteen.core.common.utils; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.XmlUtil; +import lombok.Generated; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.util.function.Function; + +public class RichTextUtil { + @Generated + private static final Logger log = LoggerFactory.getLogger(RichTextUtil.class); + + public static String getCutFileUrl(String richText) { + return parseXml(richText, FileUrlUtil::getFileUrl); + } + + private static String parseXml(String richText, Function method) { + if (StrUtil.isBlank(richText)) { + return richText; + } else { + try { + Document document = XmlUtil.parseXml(richText); + processHtml(document.getDocumentElement(), method); + richText = XmlUtil.toStr(document, "UTF-8", false, true); + } catch (Exception e) { + log.error("{}解析富文本错误:{}", new Object[]{richText, e.getMessage(), e}); + } + + return richText; + } + } + + private static void processHtml(Element element, Function method) { + NodeList children = element.getChildNodes(); + + for(int i = 0; i < children.getLength(); ++i) { + Node node = children.item(i); + if (node instanceof Element) { + Element child = (Element) node; + if ("img".equalsIgnoreCase(child.getNodeName())) { + String oldSrc = child.getAttribute("src"); + String newSrc = (String)method.apply(oldSrc); + child.setAttribute("src", newSrc); + } + + processHtml(child, method); + } + } + + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/nutrition/domain/HealthPopularScience.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/nutrition/domain/HealthPopularScience.java index e326975..0634525 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/nutrition/domain/HealthPopularScience.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/nutrition/domain/HealthPopularScience.java @@ -3,6 +3,7 @@ package com.bonus.canteen.core.nutrition.domain; import java.util.Date; import com.bonus.canteen.core.common.utils.FileUrlUtil; +import com.bonus.canteen.core.common.utils.RichTextUtil; import com.fasterxml.jackson.annotation.JsonFormat; import com.bonus.common.core.annotation.Excel; import io.swagger.annotations.ApiModelProperty; @@ -91,4 +92,8 @@ public class HealthPopularScience extends BaseEntity { public String getCoverPhoto() { return FileUrlUtil.getFileUrl(coverPhoto); } + + public void setArticleContent(String articleContent) { + this.articleContent = RichTextUtil.getCutFileUrl(articleContent); + } }