营养科普富文本图片链接处理
This commit is contained in:
parent
0ad1b05338
commit
b5bc095e7e
|
|
@ -198,6 +198,12 @@
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jsoup</groupId>
|
||||||
|
<artifactId>jsoup</artifactId>
|
||||||
|
<version>1.17.2</version> <!-- 检查最新版本 -->
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.arcsoft.face</groupId>
|
<groupId>com.arcsoft.face</groupId>
|
||||||
<artifactId>arcsoft-sdk-face</artifactId>
|
<artifactId>arcsoft-sdk-face</artifactId>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,11 @@
|
||||||
package com.bonus.canteen.core.common.utils;
|
package com.bonus.canteen.core.common.utils;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import org.jsoup.Jsoup;
|
||||||
import cn.hutool.core.util.XmlUtil;
|
import org.jsoup.nodes.Document;
|
||||||
|
import org.jsoup.nodes.Element;
|
||||||
import lombok.Generated;
|
import lombok.Generated;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
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;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class RichTextUtil {
|
public class RichTextUtil {
|
||||||
|
|
@ -17,42 +13,23 @@ public class RichTextUtil {
|
||||||
private static final Logger log = LoggerFactory.getLogger(RichTextUtil.class);
|
private static final Logger log = LoggerFactory.getLogger(RichTextUtil.class);
|
||||||
|
|
||||||
public static String getCutFileUrl(String richText) {
|
public static String getCutFileUrl(String richText) {
|
||||||
return parseXml(richText, FileUrlUtil::getFileUrl);
|
return parseXml(richText);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String parseXml(String richText, Function<String, String> method) {
|
private static String parseXml(String richText) {
|
||||||
if (StrUtil.isBlank(richText)) {
|
// 1. 解析 HTML
|
||||||
return richText;
|
Document doc = Jsoup.parse(richText);
|
||||||
} else {
|
|
||||||
try {
|
// 2. 遍历所有 <img> 标签并修改 src
|
||||||
Document document = XmlUtil.parseXml(richText);
|
for (Element img : doc.select("img")) {
|
||||||
processHtml(document.getDocumentElement(), method);
|
String originalSrc = img.attr("src");
|
||||||
richText = XmlUtil.toStr(document, "UTF-8", false, true);
|
img.attr("src", FileUrlUtil.getFileUrl(originalSrc));
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("{}解析富文本错误:{}", new Object[]{richText, e.getMessage(), e});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return richText;
|
// 3. 获取处理后的 HTML
|
||||||
}
|
String processedText = doc.body().html();
|
||||||
}
|
|
||||||
|
|
||||||
private static void processHtml(Element element, Function<String, String> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return processedText;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue