Helius
2022-07-09 4542d50cd5a6f25b2b9c7410be45992af87a8f5e
修改模板上传逻辑
2 files modified
1 files added
150 ■■■■■ changed files
src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java 73 ●●●●● patch | view | raw | blame | history
src/test/java/com/xcong/farmer/cms/TemplateTest.java 52 ●●●●● 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);
            }
        }
    }
}