src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/test/java/com/xcong/farmer/cms/TemplateTest.java | ●●●●● patch | view | raw | blame | history |
src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
@@ -80,32 +80,7 @@ return false; } public void staticPath() { // 设置img的链接访问 if ("img".equals(this.element.tagName())) { String src = this.element.attr("src"); if (StrUtil.isNotBlank(STATIC_URL)) { this.element.attr("src", STATIC_URL + src); } } if ("link".equals(this.element.tagName())) { String src = this.element.attr("href"); if (StrUtil.isNotBlank(STATIC_URL)) { this.element.attr("href", STATIC_URL + src); } } if ("script".equals(this.element.tagName())) { String src = this.element.attr("src"); if (StrUtil.isNotBlank(STATIC_URL)) { this.element.attr("src", STATIC_URL + src); } } } public void parser() { staticPath(); // 判断是否为最小节点,如果是且没有特殊标签,则跳过清空 if (!isNeedEmpty()) { return; src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java
@@ -20,6 +20,8 @@ import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -88,46 +90,55 @@ continue; } Document parse = Jsoup.parse(templateFile, null); String attr = parse.head().attr("name"); CmsTemplateEntity cmsTemplate = new CmsTemplateEntity(); cmsTemplate.setCompanyId(companyId); if (name.endsWith(".list.html")) { cmsTemplate.setType(2); } else if (name.endsWith(".article.html")) { cmsTemplate.setType(3); } else { cmsTemplate.setType(1); } cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : templateFile.getName()); cmsTemplate.setPath(templateFile.getName()); this.baseMapper.insert(cmsTemplate); insertTemplate(templateFile, companyId); } } if (".html".equals(suffix)) { FileUtil.touch(file); Document parse = Jsoup.parse(file, null); String attr = parse.head().attr("name"); CmsTemplateEntity cmsTemplate = new CmsTemplateEntity(); cmsTemplate.setCompanyId(companyId); if (file.getName().endsWith(".list.html")) { cmsTemplate.setType(2); } else if (file.getName().endsWith(".article.html")) { cmsTemplate.setType(3); } else { cmsTemplate.setType(1); } cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : file.getName()); cmsTemplate.setPath(file.getName()); this.baseMapper.insert(cmsTemplate); insertTemplate(file, companyId); } } catch (IOException e) { e.printStackTrace(); throw new GlobalException("模板上传失败"); } } private void insertTemplate(File file, Long companyId) throws IOException { Document parse = Jsoup.parse(file, null); String attr = parse.head().attr("name"); staticPathParser(parse, "img", "src"); staticPathParser(parse, "href", "link"); staticPathParser(parse, "script", "src"); CmsTemplateEntity cmsTemplate = new CmsTemplateEntity(); cmsTemplate.setCompanyId(companyId); if (file.getName().endsWith(".list.html")) { cmsTemplate.setType(2); } else if (file.getName().endsWith(".article.html")) { cmsTemplate.setType(3); } else { cmsTemplate.setType(1); } cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : file.getName()); cmsTemplate.setPath(file.getName()); this.baseMapper.insert(cmsTemplate); } private void staticPathParser(Document document, String tagName, String attrKey) { Elements elements = document.getElementsByTag(tagName); if (elements.isEmpty()) { return; } for (Element element : elements) { String attr = element.attr(attrKey); if (StrUtil.isNotBlank(attr) && !attr.contains("http://") && !attr.contains("https://")) { element.attr(attrKey, cmsProperties.getBaseUrl() + attr); } } } src/test/java/com/xcong/farmer/cms/TemplateTest.java
New file @@ -0,0 +1,52 @@ package com.xcong.farmer.cms; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; /** * @author wzy * @date 2022-07-09 **/ @SpringBootTest public class TemplateTest { String baseUrl = "http://120.27.238.55:8000/cms/static/"; @Test public void staticFileTest() throws IOException { File file = new File("/Users/helius/Desktop/template-online/index-test.html"); Document parse = Jsoup.parse(file, "utf-8"); staticPathParser(parse, "img", "src"); staticPathParser(parse, "href", "link"); staticPathParser(parse, "script", "src"); FileOutputStream outputStream = new FileOutputStream(file); outputStream.write(parse.html().getBytes()); outputStream.close(); } public void staticPathParser(Document document, String tagName, String attrKey) { Elements elements = document.getElementsByTag(tagName); if (elements.isEmpty()) { return; } for (Element element : elements) { String attr = element.attr(attrKey); if (StrUtil.isNotBlank(attr) && !attr.contains("http://") && !attr.contains("https://")) { element.attr(attrKey, baseUrl + attr); } } } }