在 Umi3 中配置 UEditor

1 篇文章 0 订阅


前言

最近在公司的 CMS 系统开发中遇到了富文本组件定制的功能,需要支持插入代码片段,高亮,推特分享等定制化功能,尝试了一些富文本做二次开发不是特别好用,最终决定使用 ueditor 进行二次开发,但 ueditor 已经停止维护多年,没有直接支持组件化,故我们只能通过其他方式进行引入。


一、下载 UEditor 源码

https://github.com/fex-team/ueditor/releases

二、配置 Umi 打包

在 umi 项目根目录下创建 lib 文件夹,并将 ueditor 代码放入。
在这里插入图片描述
配置打包,将 lib 下的所有 js 代码复制到打包目录中
在这里插入图片描述
打包后 lib 目录则会被复制到 dist/lib 下
在这里插入图片描述
配置全局加载 js 如下,这里需要严格按照该顺序导入,否则需要自定义 ueditor 配置参数。
在这里插入图片描述
创建一个 UEditor 组件如下

import { useEffect, useRef } from "react";

const UEditor = () => {
  const id = useRef(new Date().getTime() + "").current;

  useEffect(() => {
    const ue = (window as any).UE.getEditor(id, {});  // 页面加载完成后,创建 ueditor, 第二个参数为配置参数
    return () => ue.delEditor(id);  // 页面离开时销毁,否则 ueditor 会进行缓存
  }, [])

  return (
    <>
      <script style={{ width: '100%', height: 800 }} id={id} type="text/plain" />
    </>
  )
}

export default UEditor;

引用该组件
在这里插入图片描述
展示效果如下
在这里插入图片描述

三、上传组件配置

如果采用前后端分离的形式,上传配置可直接在 getEditor 中传入 ,不需要从后端获取。配置参数如下

 /* 上传图片配置项 */
    "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
    "imageFieldName": "upfile", /* 提交的图片表单名称 */
    "imageMaxSize": 2048000, /* 上传大小限制,单位B */
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
    "imageCompressEnable": true, /* 是否压缩图片,默认是true */
    "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
    "imageInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageUrlPrefix": "", /* 图片访问路径前缀 */
    "imagePathFormat": "/ueditor/jsp/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/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
    "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
    "scrawlInsertAlign": "none",

    /* 截图工具上传 */
    "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
    "snapscreenPathFormat": "/ueditor/jsp/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/jsp/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/jsp/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/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
    "fileUrlPrefix": "", /* 文件访问路径前缀 */
    "fileMaxSize": 51200000, /* 上传大小限制,单位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/jsp/upload/image/", /* 指定要列出图片的目录 */
    "imageManagerListSize": 20, /* 每次列出文件数量 */
    "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
    "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */

    /* 列出指定目录下的文件 */
    "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
    "fileManagerListPath": "/ueditor/jsp/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"
    ] /* 列出的文件类型 */

付上传返回数据格式

{
	"state": "SUCCESS",
	"original": "80px - test.jpg",
	"size": "1024",
	"title": "1465731377326075274.jpg",
	"type": ".jpg",
	"url": "/xxxx/xxx.jpg"
}

总结

以上就是 umi3 中使用 ueditor 的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 Umi4 配置 Ueditor 之前,需要先安装 Umi4 和 Ueditor。 1. 安装 Umi4 ``` npm install -g umi ``` 2. 安装 Ueditor ``` npm install ueditor --save ``` 3. 在 Umi4 项目的配置文件 config/config.js 添加以下代码: ``` export default { plugins: [ ['umi-plugin-react', { antd: true, dva: true, dynamicImport: false, title: 'your app title', dll: false, routes: { exclude: [ /models\//, /services\//, /components\//, ], }, }], ], externals: { 'UE': 'window.UE', }, }; ``` 4. 在需要使用 Ueditor 的页面,使用 import 引入 Ueditor 组件,并在 componentDidMount 引入 Ueditor: ``` import React, { Component } from 'react'; import 'ueditor/ueditor.config.js'; import 'ueditor/ueditor.all.min.js'; import 'ueditor/lang/zh-cn/zh-cn.js'; class MyEditor extends Component { componentDidMount () { const { editorId } = this.props; if (editorId) { window.UE = window.UE || {}; window.UE.delEditor(editorId); window.UE.getEditor(editorId, { initialFrameWidth: '100%', initialFrameHeight: 500, autoHeightEnabled: false, autoFloatEnabled: true, }); } } render () { const { editorId } = this.props; return ( <div> {editorId && <div id={editorId}></div>} </div> ); } } export default MyEditor; ``` 5. 在需要使用富文本编辑器的页面,使用 MyEditor 组件并传入 editorId 属性: ``` import React, { Component } from 'react'; import MyEditor from './MyEditor'; class MyPage extends Component { render () { return ( <div> <MyEditor editorId="my-ueditor" /> </div> ); } } export default MyPage; ``` 这样,就可以在 Umi4 项目使用 Ueditor 了。需要注意的是,使用 Ueditor 需要进行一些配置和调整,如设置编辑器的宽度、高度、语言等。同时,由于 Ueditor 依赖一些全局变量和样式,需要在使用之前进行引入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值