wangEditor富文本编辑器的调用开发实录(v5版本、多个编辑器、php后端上传视频阿里云OSS、编辑HTML回显)

  1. wangEditor富文本编辑器的调用开发实录(v5版本、获取HTML内容、上传图片、隐藏上传视频)
  2. wangEditor富文本编辑器的调用开发实录2(V5版本自定义粘贴,去除复制word或网页html冗余样式代码的解决方案)

wangEditor富文本编辑器的调用开发实录

  • 一、多个编辑器
    • 1.构建HTML容器
    • 2.创建编辑器和工具栏
  • 二、编辑内容时编辑器回显HTML
    • 1.创建textarea隐藏表单,用于储存从数据库读取过来的HTML数据,而不是直接将HTML置入js代码中
    • 2.js获取HTML数据
  • 三、上传视频阿里云OSS
    • 1.配置上传图片和视频菜单
    • 2.配置后端视频处理模式

一、多个编辑器

1.构建HTML容器

<div class="layui-form-item">
                    <label for="editor-toolbar-1" class="layui-form-label">主观资料 <span class="x-red">* </span></label>
                    <div class="layui-input-block">
                        <div class="editor-border">
                            <div id="editor-toolbar-1"><!-- 工具栏 --></div>
                            <div id="editor-text-area-1" class="editor-height"><!-- 编辑器 --></div>
                        </div>
                    </div>
                </div>

                <div class="layui-form-item">
                    <label for="editor-toolbar-1" class="layui-form-label">客观资料 <span class="x-red">* </span></label>
                    <div class="layui-input-block">
                        <div class="editor-border">
                            <div id="editor-toolbar-2"><!-- 工具栏 --></div>
                            <div id="editor-text-area-2" class="editor-height"><!-- 编辑器 --></div>
                        </div>
                    </div>
                </div>

2.创建编辑器和工具栏

 const E = window.wangEditor
    //主观资料
    const editor1 = E.createEditor({
        selector: '#editor-text-area-1',
        config: {
            placeholder: '<p><strong>二、主观性资料S</strong><br>包括患者的主诉、现病史、既往史、个人史、家族史等。(可粘贴图片,或上传视频)</p>',
            autoFocus: false,
            onChange(editor) {
                //document.getElementById('content-view-1').innerHTML = editor.getHtml()
            }
        },
        html: ''
    })
    const toolbar1 = E.createToolbar({
        editor: editor1,
        selector: '#editor-toolbar-1',
        config: {},
        mode: 'default'
    })

    //客观资料
    const editor2 = E.createEditor({
        selector: '#editor-text-area-2',
        config: {
            placeholder: '<p><strong>三、客观性资料0</strong><br>包括患者的体格检查、实验室检查、影像学检查等。(可粘贴图片,或上传视频)</p>',
            autoFocus: false,
            onChange(editor) {
                //document.getElementById('content-view-1').innerHTML = editor.getHtml()
            }
        },
        html: ''
    })
    const toolbar2 = E.createToolbar({
        editor: editor2,
        selector: '#editor-toolbar-2',
        config: {},
        mode: 'default'
    })

二、编辑内容时编辑器回显HTML

1.创建textarea隐藏表单,用于储存从数据库读取过来的HTML数据,而不是直接将HTML置入js代码中

 <div class="layui-form-item">
                    <label for="editor-toolbar-1" class="layui-form-label">主观资料 <span class="x-red">* </span></label>
                    <div class="layui-input-block">
                        <div class="editor-border">
                            <div id="editor-toolbar-1"><!-- 工具栏 --></div>
                            <div id="editor-text-area-1" class="editor-height"><!-- 编辑器 --></div>
                        </div>
                        <textarea name="forum_subjective" id="forum_subjective" style="display: none;"><p><strong>二、主观性资料S</strong><br>包括患者的主诉、现病史、既往史、个人史、家族史等。(可粘贴图片,或上传视频)</p></textarea>
                    </div>
                </div>

2.js获取HTML数据

使用

onCreated(editor) {
                editor.setHtml(forum_subjective)
            }

回显数据。

    var forum_subjective = $("#forum_subjective").val();
      //主观资料
    const editor1 = E.createEditor({
        selector: '#editor-text-area-1',
        config: {
            placeholder: 'Type here...',
            autoFocus: false,
            onCreated(editor) {
                editor.setHtml(forum_subjective)
            },
            onChange(editor) {
                //document.getElementById('content-view-1').innerHTML = editor.getHtml()
            }
        },
        html: ''
    })

三、上传视频阿里云OSS

1.配置上传图片和视频菜单

 const editor1 = E.createEditor({
        selector: '#editor-text-area-1',
        config: {
            placeholder: 'Type here...',
            autoFocus: false,
            MENU_CONF: {
                uploadImage: {
                    fieldName: 'file',//后台获取文件方式;
                    server: '?m=Upload&a=uploadDeal&act=wangEditor&fromType=forum&token=' + token,
                    maxFileSize: 1 * 1024 * 1024, // 1M
                    allowedFileTypes: ['image/*'],
                    onFailed(file, res) {
                        layer.msg(res.message);
                    },
                    onError(file, err, res) {
                        layer.msg(file.name + err);
                    }
                },
                uploadVideo: {
                    fieldName: 'file',//后台获取文件方式;
                    server: '?m=Upload&a=uploadDeal&act=wangVideo&fromType=forum&token=' + token,
                    maxFileSize: 100 * 1024 * 1024, // 100M
                    maxNumberOfFiles: 1,
                    allowedFileTypes: ['video/*'],
                    timeout: 300 * 1000, // 过期时间,单位:秒
                    onBeforeUpload(file) {
                        layer.msg('视频文件较大时,上传后耐心等待视频回显。');
                    },
                    onSuccess(file, res) {
                        layer.msg(`${file.name}`+ res.message)
                    },
                    onFailed(file, res) {
                        layer.msg(res.message +'-'+ res);
                    },
                    onError(file, err, res) {
                        layer.msg(file.name + err + res);
                    }
                }
            },
           onCreated(editor) {
                editor.setHtml(forum_subjective)
            },
            onChange(editor) {
                //document.getElementById('content-view-1').innerHTML = editor.getHtml()
            }
        },
        html: ''
    })
    const toolbar1 = E.createToolbar({
        editor: editor1,
        selector: '#editor-toolbar-1',
        config: {},
        mode: 'default'
    })

2.配置后端视频处理模式

 /*上传视频*/
    case "wangVideo";
        $fromType = get_param('fromType');
        $token = get_param('token');
        $user_id = AuthCode($_COOKIE["db_user_id"], "DECODE", "LOCKDATAV", "") . "_user";

        //上传信息;
        $file = $_FILES['file'];
        $uploaded_type = $file['type'];
        $uploaded_tmp = $file['tmp_name'];
        $uploaded_ext = substr($file['name'], strrpos($file['name'], '.') + 1);
        $fileName = $user_id . "_" . md5(time()) . "." . $uploaded_ext;

        //01.获取验证token
        if ($token != $_SESSION['upToken'] || $token == "") {
            $res['errno'] = 1;
            $res['message'] = "非法传参页面,请刷新重新上传" . $token;
            session_destroy(); //验证码自动销毁;
            die(json_encode_lockdata($res));
        }

        //04.判断文件大小1M
        if ($file["size"] > 100 * 1024 * 1024) {
            $res['code'] = 1;
            $res['message'] = "文件大小不能超过100M";
            die(json_encode_lockdata($res));
        }

        //05-执行上传;
        //阿里云OSS
        if ($CONF['uploadType'] == 1) {
            $accessKeyId = $CONF['accessKeyId'];
            $accessKeySecret = $CONF['accessKeySecret'];
            $endpoint = $CONF['endpoint'];
            $bucket = $CONF['bucket'];
            $object = "tslf/" . $fileName;//目标上传路径,Object完整路径中不能包含Bucket名称
            $filePath = $uploaded_tmp;//"upload/1.mp4";//指定本地路径
            try {
                $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
                $row = $ossClient->uploadFile($bucket, $object, $filePath);
                //返回JSON;
                $res['errno'] = 0;
                $res['data']['url'] = $row['info']['url'];//视频地址
                $res['data']['poster'] = "";//封面图片
                $res['message'] = '上传成功!';
                die(json_encode_lockdata($res));
            } catch (OssException $e) {
                $res['errno'] = 1;
                $res['message'] = $e->getMessage();
                die(json_encode_lockdata($res));
            }
        }

        //本地服务器
        if ($CONF['uploadType'] == 0) {
            //创建目录;
            $upload_dir = 'upload';
            $imgUrl = $upload_dir . '/' . $fromType;
            if (!is_dir($upload_dir)) {
                mkdir($upload_dir);
            }

            if (!is_dir($imgUrl)) {
                mkdir($imgUrl);
            }

            move_uploaded_file($file['tmp_name'], $imgUrl . "/" . $fileName);
            $safe_img = $imgUrl . "/" . $fileName;

            //返回JSON;
            $res['errno'] = 0;
            $res['data']['url'] = $CONF['url'] . $safe_img;//视频地址
            $res['data']['poster'] = "";//封面图片
            $res['message'] = '上传成功!';
            die(json_encode_lockdata($res));
        }

        break;

@漏刻有时

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

matlab 路面点云标线提取

目录 一、算法原理二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 算法来自本人自创。实现效果如下图所示,具体实现原理看代码即可。 二、代码实现 clc; cle…

构建旧物回收系统的决策支持系统

内容概要&#xff1a; 在旧物回收系统中&#xff0c;构建一个有效的决策支持系统对于提高管理效率、优化资源配置具有重要意义。本文将探讨如何构建旧物回收系统的决策支持系统&#xff0c;并分析其如何辅助管理者做出更科学的决策。 一、决策支持系统的定义与功能 决策支持…

Opencv数一数有多少个水晶贴纸?

1.目标-数出有多少个贴纸 好久没更新博客了&#xff0c;最近家里小朋友在一张A3纸上贴了很多水晶贴纸&#xff0c;要让我帮他数有多少个&#xff0c;看上去有点多&#xff0c;贴的也比较随意&#xff0c;于是想着使用Opencv来识别一下有多少个。 原图如下&#xff1a; 代码…

校园车辆管理系统的设计与实现

第1章 绪论 1.1 研究背景与意义 随着高等教育的普及和扩张&#xff0c;大学校园已成为一个综合性的小型社会。教学楼、实验室、宿舍、体育设施等构成了庞大且复杂的校园基础设施。在这样的环境下&#xff0c;教师、学生、家长及访客的车辆数量也随之增多&#xff0c;这不仅带来…

python-02

面向对象 Python中把具有相同属性和方法的对象归为一个类。 class ClassName: 语句 class Myclass: # 定义类Myclassdef pp(self): # 定义方法pp()print("这是产品说明书")myclass Myclass() # 实例化类Myclass myclass.pp() # 调用Myclass中的方法pp()打印…

电脑缺失d3dcompiler_47.dll会怎么样,该如何修复呢

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“缺少d3dcompiler47.dll文件”。那么&#xff0c;d3dcompiler47.dll到底是什么&#xff1f;为什么计算机会缺失它&#xff1f;它会对电脑产生什么具体影响&#xff1f;如何解决这个问题&…

⭐Unity 控制任意UI的渐隐渐显

使用脚本之前先给要控制的UI加上CanvasGroup组件 解释: 这个脚本使用协程来逐渐改变CanvasGroup的alpha值&#xff0c;从而实现渐隐和渐显的效果。 Mathf.Lerp函数用于在指定的时间内平滑地从当前透明度过渡到目标透明度。 通过调用FadeIn和FadeOut方法&#xff0c;你可以在任…

SpringBoot 实现 阿里云语音通知(SingleCallByTts)

目录 一、准备工作1.开通 阿里云语音服务2.申请企业资质3.创建语音通知模板&#xff0c;审核通过4.调用API接口---SingleCallByTts5.调试API接口---SingleCallByTts 二、代码实现1.导入依赖 com.aliyun:aliyun-java-sdk-dyvmsapi:3.0.22.创建工具类&#xff0c;用于发送语音通知…

C++面向对象程序设计 - 函数库

C语言程序中各种功能基本上都是由函数来实现的&#xff0c;在C语言的发展过程中建立了功能丰富的函数库&#xff0c;C从C语言继承了些函数功能。如果要用函数库中的函数&#xff0c;就必须在程序文件中包含文件中有关的头文件&#xff0c;在不同的头文件中&#xff0c;包含了不…

RabbitMQ实践——交换器(Exchange)绑定交换器

在《RabbitMQ实践——交换器&#xff08;Exchange&#xff09;和绑定&#xff08;Banding&#xff09;》一文中&#xff0c;我们实验了各种交换器。我们可以把交换器看成消息发布的入口&#xff0c;而消息路由规则则是由“绑定关系”&#xff08;Banding&#xff09;来定义&…

GitLab教程(二):快速上手Git

文章目录 1.将远端代码克隆到本地2.修改本地代码并提交到远程仓库3.Git命令总结git clonegit statusgit addgit commitgit pushgit log 首先&#xff0c;我在Gitlab上创建了一个远程仓库&#xff0c;用于演示使用Gitlab进行版本管理的完整流程&#xff1a; 1.将远端代码克隆到本…

快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发

基于LangChain的快速RAG应用原型制作方法 还记得构建智能聊天机器人需要数月编码的日子吗&#xff1f; LangChain这样的框架确实简化了开发流程&#xff0c;但对非程序员来说&#xff0c;数百行代码仍然是一道门槛。 有没有更简单的方法呢&#xff1f; 图片由 Ravi Palwe 在…

数字政协:迈向智慧时代,开启政协工作新篇章

在信息化浪潮席卷全球的今天&#xff0c;数字技术不仅改变了我们的生活方式&#xff0c;也深刻影响着政治生态的变革。其中&#xff0c;“数字政协”的崛起&#xff0c;正是新时代政协工作创新发展的重要标志。那么&#xff0c;什么是数字政协&#xff1f;它又将如何助力政协工…

[图解]建模相关的基础知识-09

1 00:00:01,350 --> 00:00:03,780 首先&#xff0c;我们来看一下什么叫关系 2 00:00:05,370 --> 00:00:08,990 这个关系跟下面说的这些关系 3 00:00:09,000 --> 00:00:10,390 它不是一个东西 4 00:00:11,110 --> 00:00:14,950 比如说&#xff0c;我们UML类图上&…

门控循环单元GRU与长短期记忆网络LSTM

门控循环单元与长短期记忆网络 门控隐状态 问题提出&#xff1a;对于一个序列来说不是每个观察值都是同等重要想只记住相关的观察需要&#xff1a; 能关注的机制&#xff08;更新门&#xff09;能遗忘的机制&#xff08;重置门&#xff09; 第一个词元的影响至关重要。 我们…

使用vuejs3时,报错:Uncaught (in promise)

解决&#xff1a; vite.config.js里 import {fileURLToPath, URL} from node:urlimport {defineConfig} from vite import vue from vitejs/plugin-vue// https://vitejs.dev/config/ export default defineConfig({resolve: {alias: {: fileURLToPath(new URL(./src, import…

LeetCode | 520.检测大写字母

这道题直接分3种情况讨论&#xff1a;1、全部都为大写&#xff1b;2、全部都为小写&#xff1b;3、首字母大写其余小写。这里我借用了一个全是大写字母的串和一个全为小写字母的串进行比较 class Solution(object):def detectCapitalUse(self, word):""":type …

通过Vue3+高德地图的JS API实现市区地图渲染

效果图: 核心代码: <script setup>import { onMounted, onUnmounted } from vue;import AMapLoader from @amap/amap-jsapi-loader;import { message } from ant-design-vue;import school from @/assets/icons/school.svg;import enterprise from @/assets/icons/ent…

pytest + yaml 框架 -61.jenkins+allure+钉钉通知添加测试结果

前言 上一篇pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈 已经实现测试结果用钉钉通知。 本篇继续在钉钉通知里添加测试的汇总结果,此功能在pytest-yaml-yoyo v1.5.2版本上实现。 Environment Injector 插件 在运行完用例后会生成一个summary.json 文件,汇总…

JAVA小知识20:万字详解List与ArrayList

一、集合简介 1.1、什么是集合&#xff1f; 可同时存储多个元素的数据结构就是集合。 1.2、为什么要有集合&#xff1f; 我们可以使用数组同时存储多个元素&#xff0c;但是数组有个弊端。数组创建之后长度就会固定&#xff0c;如需扩容则需要手动扩容&#xff0c;我们需要…