前端、后台(ueditor)富文本的使用和回显

news2025/4/11 8:11:20

前端、后台富文本的使用

  • 前端如何配置ueditor
    • json文件注释
  • 一、html、js引用ueditor
  • 二、后端返回ueditor的json文件
    • 1.配置接受ueditor的接口
  • 三、回显


效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前端如何配置ueditor

下载ueditor资源文件地址:
ueditor资源文件压缩包下载

下载解压后放在js文件夹即可
在这里插入图片描述

json文件注释

json文件注释需要更具自己的相关信息来修改,比如保存图片地址,访问图片前缀

/* 前后端通信相关的配置,注释只允许使用多行方式 */
{
    /* 上传图片配置项 */
    "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
    "imageFieldName": "upfile", /* 提交的图片表单名称 */
    "imageMaxSize": 2048000, /* 上传大小限制,单位B */
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
    "imageCompressEnable": true, /* 是否压缩图片,默认是true */
    "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
    "imageInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageUrlPrefix": "", /* 图片访问路径前缀 */
    "imagePathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
                                /* {time} 会替换成时间戳 */
                                /* {yyyy} 会替换成四位年份 */
                                /* {yy} 会替换成两位年份 */
                                /* {mm} 会替换成两位月份 */
                                /* {dd} 会替换成两位日期 */
                                /* {hh} 会替换成两位小时 */
                                /* {ii} 会替换成两位分钟 */
                                /* {ss} 会替换成两位秒 */
                                /* 非法字符 \ : * ? " < > | */
                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */

    /* 涂鸦图片上传配置项 */
    "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
    "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
    "scrawlPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
    "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
    "scrawlInsertAlign": "none",

    /* 截图工具上传 */
    "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
    "snapscreenPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
    "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */

    /* 抓取远程图片配置 */
    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
    "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
    "catcherFieldName": "source", /* 提交的图片列表表单名称 */
    "catcherPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "catcherUrlPrefix": "", /* 图片访问路径前缀 */
    "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */

    /* 上传视频配置 */
    "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
    "videoFieldName": "upfile", /* 提交的视频表单名称 */
    "videoPathFormat": "/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "videoUrlPrefix": "", /* 视频访问路径前缀 */
    "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
    "videoAllowFiles": [
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */

    /* 上传文件配置 */
    "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
    "fileFieldName": "upfile", /* 提交的文件表单名称 */
    "filePathFormat": "/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "fileUrlPrefix": "", /* 文件访问路径前缀 */
    "fileMaxSize": 512000000, /* 上传大小限制,单位B,默认50MB */
    "fileAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ], /* 上传文件格式显示 */

    /* 列出指定目录下的图片 */
    "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
    "imageManagerListPath": "/ueditor/php/upload/image/", /* 指定要列出图片的目录 */
    "imageManagerListSize": 20, /* 每次列出文件数量 */
    "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
    "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */

    /* 列出指定目录下的文件 */
    "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
    "fileManagerListPath": "/ueditor/php/upload/file/", /* 指定要列出文件的目录 */
    "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
    "fileManagerListSize": 20, /* 每次列出文件数量 */
    "fileManagerAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ] /* 列出的文件类型 */

}

提示:以下是本篇文章正文内容,下面案例可供参考

一、html、js引用ueditor

首先在html文件中创建一个这个标签
在这里插入图片描述

<div class="row fontawesome-icon-list">

    <div class="fa-hover col-lg-3 col-md-6">
        <form class="create_form">

            <textarea  id="editor"  name="summary"  style="width:1140px;height:350px;"></textarea>


        </form >

    </div>
</div>

然后再此页面导入js文件根据自己的路径来
在这里插入图片描述
然后在打开自己创建的js文件填入一下配置

var create_product = {
   
    init: function () {
        create_product.evenBin();
        create_product.initEditor();
        
    },
    evenBin: function () {

        var btn_target = jQuery(this);
        var ue = UE.getEditor('editor');
        var content=true;

        // 提交内容
        jQuery(" #submit_affirm1").click(function () {
            // 获得富文本的内容,提交给后台后台需要保存在数据
            var text = jQuery.trim(ue.getContent());
            jQuery.ajax({
                url:  window.location.href,
                type: "POST",
                data: {
                    'text': text,
                },
                dataType: 'json',
                success: function (res) {
                        var response = JSON.parse(res);
                        alert(response.msg);
                        if (response.code == 200){
                            location.replace('/admin/login');
                        }

                }

            });


        })
    },
    initEditor: function () {
        var that = this;
        var url=document.domain+"/admin/upload";

        that.ue = UE.getEditor('editor', {
            toolbars: [
                ['undo', 'redo', '|',
                    'bold', 'italic', 'underline', 'strikethrough', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight'],
                ['customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
                    'directionalityltr', 'directionalityrtl', 'indent', '|',
                    'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
                    'link', 'unlink'],
                ['imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
                    'insertimage', 'insertvideo', '|',
                    'horizontal', 'spechars', '|', 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols']

            ],
            //设置多久自动保存
            enableAutoSave: true,
            saveInterval: 60000,
            //关闭元素路径
            elementPathEnabled: false,
            zIndex: 4,
            //图片上传的图片地址
            serverUrl:"/admin/upload",
        });


    },
}


window.onload = function () {

    create_product.init();

};

上面配置好后,打开此页面会向服务器发送一个请求: 一定要后端接受这个请求并将upload_config.json文件返回出来,不然无法使用图片功能,文章的第二节有后台的详细的处理方式

上传图片配置请求:
在这里插入图片描述
上图图片的请求:
在这里插入图片描述
从上面的截图可以分析出图片配置和上传图片的发送的action参数不一样,因此一个接口里面根据action参数值不一样来判断是上传还是要配置

二、后端返回ueditor的json文件

1.配置接受ueditor的接口

以php为例:其实什么语言都无所谓了只要前端发送的请求能接受到就ok,然后接受图片的地址保存

代码如下(示例):
写在哪个类无所谓,在route.php文件中配置此接口就可以,访问的时候能来到此方法
注意看对应ueditor的json文件注释,将参数修改成自己的

    //处理富文本上传的图片
    public function uploads()
    {
        $action = $_GET['action'];
		
		//返回upload_config.json文件,注意看对应文件的注释,将参数修改成自己的
        if ($action == "config") {
        	//配置
            $config_path =ROOT_PATH . 'public' . DS . "static" . DS ."js" . DS ."ueditor" . DS ."upload_config.json";
			//读取文件
            $json_string = file_get_contents($config_path);
          
            return $json_string ;

        }

        //上传图片
        if ($action == "uploadimage") {


            return $this->uploadimage();

        }

        //在线管理图片
        if ($action == "listimage"){
            return $this->listimage();
        }
        return "Q_Q!";
    }
        //处理富文本编辑上传的图片
    public function uploadimage()
    {
        $mistake=[
            "code"=>-1,
            "state"=>"SUCCESS",
            "url"=>""
        ];
        //接收图片
        $file = request()->file("upfile");

        if ($file){
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
            if ($info) {
                //上传成功  拼接图片的访问路径  /uploads/20190709/fssdsahfdskasa.jpg
                $goods_logo = DS . 'uploads' . DS . $info->getSaveName();


                $url=str_replace("\\","/",  $goods_logo);

                $mistake["code"] = 200;
                $mistake["url"]=$url;
                Db::query("insert into pro_file(`url`) values(?)",[$url]);

            }else{
                $mistake["code"]=-1;
                $mistake["state"]="上传错误";
            }
            return $mistake;
        }
    }

    // 在线管理图片
    public function listimage(){
        $resp =["state"=> "SUCCESS", "start"=> "", "total"=> ""] ;
        //获取当前域名
        $yuming=$this->domain();

        //接收当前参数
        $start = $_GET['start'];
        $page_size=$_GET['size'];

        //查询数据库中所有的图片
        $db=Db::query("select * from pro_file limit $page_size offset $start ");
        $list=[];
        $i=0;
        foreach ($db as $val){

            $list[$i]["url"]=$yuming.$val["url"];
            $i+=1;
        }
        $resp["list"]=$list;
        $resp["start"]=$start;
        $resp["total"]=count($db);
        return $resp;
    }

三、回显

回显的时候只需要给后台发送接口,后台返回ueditor提交的html代码,然后用js将值渲染到页面上

  //回显
        jQuery.ajax({
            url: "/admin/updata_products",
            type:"GET",
            dataType:'json',
            success:function (res) {
                var response = JSON.parse(res);
                if (response.code == 200) {
                  
                    document.getElementsByClassName("summary")[0].innerHTML=response.desc;
                    that.initEditor();
        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM笔记

LLM其实就是large language model&#xff0c;大语言模型。 AGI其实就是Artificial General Intelligence&#xff0c;通用人工智能。 如果对“最终任务”进一步进行分类&#xff0c;又大致可以分为两大不同类型的任务&#xff1a;自然语言理解类任务和自然语言生成类任务。如果…

YOLOv6: 面向工业应用的单阶段目标检测框架

论文地址&#xff1a;https://arxiv.org/pdf/2209.02976 代码地址&#xff1a;https://github.com/meituan/YOLOv6 多年来&#xff0c;YOLO 系列一直是高效目标检测的行业标准。 YOLO 社区蓬勃发展&#xff0c;丰富了其在众多硬件平台和丰富场景中的使用。在这份技术报告力求…

云原生Docker搭建chemex资产管理系统

这篇文章主要讲解如何使用Ubuntu系统安装Docker应用并且搭建Chemex资产管理系统 Chemex数据是存在数据库的&#xff0c;为了方便备份以及管理容器。可利用外部的数据库或者Docker搭建一个数据库出来。我这里就在Docker容器中创建一个Mysql数据库供Chemex资产管理系统使用。 一…

QQ浏览器是如何提升搜索相关性的?

导言 | 搜索相关性主要指衡量Query和Doc的匹配程度&#xff0c;是信息检索的核心基础任务之一&#xff0c;也是商业搜索引擎的体验优劣最朴素的评价维度之一。本文作者刘杰主要介绍QQ浏览器搜索相关性团队在相关性系统及算法方面的实践经历。值得一提的是&#xff0c;本文会特别…

数组常用方法总结 (2) :sort / join / reverse / concat

sort 排序后会改变原有数组。简单数组和对象数组都可以进行排序。默认升序排序。 <template><div class"myBlock"><div class"tableBlock"><div class"title">{{ newObject ? "操作后的数组" : "操作…

NEW | GOT Online支持多模式采集、Mono分析支持IL2CPP打包

在性能优化时&#xff0c;你是否也遇到过这样的困扰&#xff1a;和性能相关的参数非常多&#xff0c;为什么能保障广度&#xff0c;就没法保障深度&#xff1f;这是因为数据的获取本身存在打点消耗&#xff0c;如果获取全量数据势必存在大量打点操作&#xff0c;导致收集的数据…

定时任务、cron表达式、springBoot整合定时任务和异步任务-58

一&#xff1a;定时任务 1.1 官网地址 http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html 1.2 cron表达式 Cron表达式是一个字符串&#xff0c;字符串以5或6个空格隔开&#xff0c;分为6或7个域&#xff0c;每一个域代表一个含义&am…

Spring 教程

Spring 教程Spring 概述三层架构Spring 的优良特性使用 Spring 框架的好处依赖注入&#xff08;DI&#xff09;Spring 框架具有以下几个特点&#xff1a;1&#xff09;方便解耦&#xff0c;简化开发2&#xff09;方便集成各种优秀框架3&#xff09;降低 Java EE API 的使用难度…

如何集成GATEWAY作为网关(含网关404和503的解决办法)

新建model包 gateway 引入依赖 <dependencies><!--引入gateWay--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--新版本cloud去掉了负…

ESP32设备驱动-SHT31温度湿度传感器驱动

SHT31温度湿度传感器驱动 文章目录 SHT31温度湿度传感器驱动1、SHT31介绍2、硬件准备3、软件准备4、驱动实现1、SHT31介绍 SHT31 是 Sensirion 的下一代温湿度传感器。 它建立在一个新的 CMOSens 传感器芯片之上,该芯片是 Sensirion 新湿度和温度平台的核心。 与其前身相比,…

[数据库迁移]-LVM逻辑卷管理

[数据库迁移]-LVM逻辑卷管理 森格 | 2023年1月 1、本文旨在记录数据库迁移过程&#xff08;下云至机房&#xff09;中&#xff0c;对新磁盘做逻辑卷管理的过程&#xff0c;并对Linux的文件系统和分区做了相关介绍&#xff0c;如有不对之处&#xff0c;敬请指正。 2、对Linux文…

【实践】百度信息流推荐系统质效合一的交付系统建设

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年12月份热门报告盘点百度APP Feed流业务架构变迁思考和升级实践罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿《底层逻辑》高清配图‍基于深度学习的个性化…

数据结构:关于时间复杂度的例题计算

1、嵌套循环时间复杂度的计算 该程序&#xff0c;最上面的嵌套循环里&#xff0c;i每执行一次&#xff0c;j就执行N次&#xff0c;所以嵌套循环执行次数为N*N次&#xff1b;中间的k变量循环了2*N次&#xff1b;最后M变量循环10次。所以总共执行了 N*N2*N10 次&#xff01; 所以…

ERROR: Could not find a version that satisfies the requirement six>=1.9.0

问题分析 ERROR: Could not find a version that satisfies the requirement six>1.9.0 (from prompt-toolkit) (from versions: none) ERROR: No matching distribution found for six>1.9.0 出现这个问题的原因是python国内网络不稳定&#xff0c;用pip管理工具安装库…

websocket创建时附加额外信息 [如自定义headers信息(利用nginx)]

目录 情景描述&#xff1a; 解决方案 一、服务端要求前端创建websocket时附带的token&#xff0c;必须放在request的headers中&#xff08;常出现在第三方的合作中&#xff09;&#xff1b; 思路&#xff1a; 整体效果&#xff1a; 具体步骤&#xff1a; 二、服务端只需要获…

【Unity云消散】巩固step,lerp和smoothstep

之前在学习HLSL常用函数时就有涉及到范围相关的函数&#xff0c;但是最近做的东西发现step,lerp和smoothstep这三个函数总是一直在用&#xff0c;总是会在用的时候突然忘记他们分别是干啥的&#xff0c;这里就记录一下方便查看吧&#xff0c;形式大部分参考Unity Shader 极简实…

单绞机控制算法(线缆行业)

在了解单绞机之前需要大家对收放卷以及排线控制有一定的了解,不清楚的可以参看下面几篇博客,这里不再赘述,受水平和能力所限,文中难免出现错误和不足之处,诚恳的欢迎大家批评和指正。 收放卷行业开环闭环控制算法 PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博…

whistle本地代理线上(vue项目)

安装whistle install -g whistle 安装好后&#xff0c;cmd控制台启动whistle “w2 start” 访问whistle本地前端 127.0.0.1:8899 &#xff08;一般是这个网址&#xff09; 这里要注意如果您当前使用的是https类型的域名&#xff0c;需要安装https证书&#xff0c;这样才能代…

ShardingSphere的强制路由不起作用

开启注释 开启hint 然后使用注释去查询&#xff1a;/* ShardingSphere hint: dataSourceNameds_db */

本地数仓项目(三)—— 数据可视化和任务调度

1 背景 本文基于《本地数据仓库项目(一)——数仓搭建详细流程》和《本地数仓项目(二)——搭建系统业务数仓详细流程》数据为依托&#xff0c;实现数据可视化和任务调度 2 构造可视化数据 在mysql中新建ads_uv_count表 DROP TABLE IF EXISTS ads_uv_count; CREATE TABLE ads…