WangEditor富文本编辑器图片上传踩坑之路

解决办法:wangeditor报错:this.editor.txt.html 显示‘txt’ undefined未定义,Cannot read property ‘txt‘ of undefined 一、最近在项目上用了wangeditor富文本编辑器,可以正常输入编辑。但是在对数据进行回显到编辑器的时候报错了,显示Cannot read property ‘txt’ of undefined。 搞了好久,一直以为是不是自己没导入啥依赖,但事实不是。是因为自己没有正确创建编辑器editor实例所以它无法调用自己原本的方法txt。 二、报错原因:创建editor实例 和 获取后端数据 和回显数据这个三个方法的顺序搞错了。 三、正确顺序: -1、在created(){} 中先获取后端数据然后回显数据。 -2 阅读详情
AI摘要

本文介绍如何在项目中集成轻量级富文本编辑器wangEditor,并实现图片上传功能。包括wangEditor的基本显示、图片上传的后端接口编写、前端HTML代码及一些常见问题解决。

        最近由于业务需求,需要用到富文本编辑器,找寻了好久,起初想使用百度的ueditor,但在使用的过程中实在是遇到了太多的坑,于是另外锁定了一款富文本编辑器——wangEditor。这是一款轻量级的富文本编辑器,比起百度的ueditor,这款编辑器的界面更加简单,文档也很详细。对于需求不是很高的功能来说,这款编辑器实在是不二之选。

一、wangEditor的基本显示demo

这个部分非常简单,官网文档也写得非常详细,直接参考官网即可

附上文档地址:https://www.kancloud.cn/wangfupeng/wangeditor3/335769

       下载地址:https://github.com/wangfupeng1988/wangEditor/releases 

编辑器效果如下:

二、图片上传后台接口编写

后台用到的是springboot+mybatis+mysql,为了方便测试,图片上传后是直接放在本地服务器。

2.1、Service层代码

public interface IImgUploadService {

    String imgUpload(String imgPath);
}



@Service("iImgUploadService")
public class ImgUploadServiceImpl implements IImgUploadService {

    @Autowired
    private ImageUploadMapper imageUploadMapper;

    private static Logger logger = LoggerFactory.getLogger("ImgUploadServiceImpl.class");


    /**
     * 存储上传图片的路径
     * @param
     * @return
     */
    public String imgUpload(String imgPath){

        ImageUpload upload = new ImageUpload();
        upload.setImgpath(imgPath);
        // 一定要加非空判断,否则会报空指针异常
        if(upload.getImgpath() == null){
            return "图片地址为空";
        }
//        logger.error("向数据库中存储的路径为:" + upload.getImgpath());
//        logger.error("传递过来的imgPath参数为:" + imgPath);
//        logger.error(upload.toString());
        int rowCount = imageUploadMapper.insertImgPath(upload.getImgpath());
        logger.error(rowCount + "");
        if(rowCount > 0){
            return "图片地址存储成功";
        }
        return "图片地址存储失败";
    }
}

2.2、Controller层代码

public class TestController {

    private static final Logger logger = LoggerFactory.getLogger("TestController.class");
    private final ResourceLoader resourceLoader;
    @Autowired
    private IImgUploadService iImgUploadService;
    @Value("${web.upload-path}")
    private String path;
    @Value("${server.port}")
    private String port;

    @Autowired
    public TestController(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }

    /**
     * @param file 要上传的文件
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
    public Map<String, String> upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {

        Map<String,String>  map=new HashMap<>();

        String filePath = request.getSession().getServletContext().getRealPath(path);

        //生成随机字符串,用于图片命名
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");

        // 获得文件类型
        String fileType = file.getContentType();
        // 获得文件后缀名称
        String imageName = fileType.substring(fileType.indexOf("/") + 1);
        // 原名称
//        String fileName = file.getOriginalFilename();
        // 新名称
        String newFileName = uuid + "." + imageName;

        System.out.println(imageName);

        try {
            FileUtils.upload(file.getBytes(), filePath, newFileName);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 拼接图片url
        String imgHost = "http://127.0.0.1:" + port;
        String imgUploadPath = path;
        String imgName = newFileName;
        String imgPath = imgHost + imgUploadPath + imgName;
        iImgUploadService.imgUpload(imgPath);
        map.put("url",imgPath);
        return map;

    }

    /**
     * 跳转到文件上传页面
     *
     * @return
     */
    @RequestMapping("test")
    public String toUpload() {
        return "ttt";
    }

2.3、前端HTML代码

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>ueditor-demo</title>
    <script th:src="@{${#httpServletRequest.getContextPath()}+'/js/jquery-1.7.1.min.js'}"></script>
    <script th:src="@{${#httpServletRequest.getContextPath()}+'/js/wangEditor.min.js'}"></script>

</head>
<body>
<h2>wangEditor</h2>

<div id="editor">
    <p>欢迎使用 <b>wangEditor</b> 富文本编辑器</p>
</div>

<!-- 注意, 只需要引用 JS,无需引用任何 CSS !!!-->
<script type="text/javascript" src="/wangEditor.min.js"></script>
<script type="text/javascript">
    var E = window.wangEditor;
    var editor = new E('#editor');

    //开启debug模式
    editor.customConfig.debug = true;
    // 关闭粘贴内容中的样式
    editor.customConfig.pasteFilterStyle = false
    // 忽略粘贴内容中的图片
    editor.customConfig.pasteIgnoreImg = true
    // 使用 base64 保存图片
    //editor.customConfig.uploadImgShowBase64 = true


    editor.customConfig.uploadFileName = "file";
    editor.customConfig.uploadImgServer = '/fileUpload';
    editor.customConfig.debug = true;

    //自定义上传图片事件
    editor.customConfig.uploadImgHooks = {
        before: function (xhr, editor, files) {

        },
        success: function (xhr, editor, result) {
            console.log("上传成功");
        },
        fail: function (xhr, editor, result) {
            console.log("上传失败,原因是" + result);
        },
        error: function (xhr, editor) {
            console.log("上传出错");
        },
        timeout: function (xhr, editor) {
            console.log("上传超时");
        },
        customInsert: function (insertImg, result, editor) {
            // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)
            // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果

            // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:
            var url = result.url;
            insertImg(url)

            // result 必须是一个 JSON 格式字符串!!!否则报错
        }

    };
    // 或者 var editor = new E( document.getElementById('editor') )
    editor.create()
</script>

</body>

</html>

2.4、效果展示

 

三、踩坑经历

做的是一个小demo所以代码很简单。下面是我要说的重点,我的踩坑经历。

3.1、上传图片的参数问题

如果后台自定义的上传文件的参数,如图

那么前端js中就得添一句:

editor.customConfig.uploadFileName = 'file'

用于指定参数名,否则前端会出现“400”的错误。

3.2、图片上传的接口配置

在这里我被官网的文档给坑了一把,也许是我自己没理解清楚吧,唉!文档中如下图所说配置

配置地址用的是

editor.config.uploadImgUrl = '/upload';

然而我用这个确怎么也无法成功,编辑器都无法创建,后来更改为

// 配置服务器端地址
    editor.customConfig.uploadImgServer = '/upload'

成功创建编辑器。

3.3、后台数据返回与编辑器内部图片显示

       如果我们通过上面配置的接口成功将图片上传至服务器了,现需要在编辑器里将刚上传的图片显示在编辑器里面。那么后台需要返回图片的url,格式如http://localhost:8011/uploadfiles/5168898981064558.jpeg,在浏览器中输入该url,然后回车,要能得到刚才上传的图片

例如:

接着要想让此图片在编辑器里面显示,还需要在前端自定义插入图片的事件,因为编辑器是不会自动插入图片的,贴出该事件的代码:

customInsert: function (insertImg, result, editor) {
      
        // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果

        // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:
        var url = result.url
        insertImg(url)

        }

注意:result 必须是一个 JSON 格式字符串!!!否则报错

 

最后贴出demo的完整代码地址:https://gitee.com/1697923044/springboot-wangEditor

1、项目默认将图片上传到本地路径,如果需要上传到服务器路径直接在项目中进行修改即可,不要忘了修改存储到数据库中的路径。

2、项目没有使用任何图片上传控件或插件,原生springBoot实现,简单易上手。

3、项目使用Maven进行构建,朋友们在导入项目时不要导错了。

 

【富文本】wangeditor编辑器简单使用(自定义图片上传) 一、wangeditor 官网 二、引入 npm i wangeditor --save // 使用 import E from "wangeditor" const editor = new E("#div1") editor.create() 三、使用 自定义上传图片,先转base64,转blob,上传服务器 <div id="wangeditor"> <div ref="editorElem" style="text-align:left;" /> &l 阅读详情

相关推荐

wangEditor 富文本编辑器

wangEditor 富文本编辑器 效果如下: 代码: <div id="fdEmailContext" style="width: 99%;"></div> 导入 <script type="text/javascript" src="../wangEditor/wangEditor.min.js"></script> javascript const E = window.wangEditor const editor = new E("#

weixin_43506403的博客 1208

wangEditor自定义上传

wangEditor自定义上传配置部分的代码。

weixin_45041493的博客 888

Vue3实战:wangEditor富文本的深度定制与性能优化——从禁用控制到菜单配置

本文详细介绍了在Vue3项目中深度定制wangEditor富文本编辑器的实战经验,包括基础集成、动态禁用功能实现、工具栏菜单配置、性能优化等关键技巧。重点讲解了如何使用shallowRef优化性能,以及通过toolbarKeys和disable方法实现灵活的菜单控制和状态管理,帮助开发者提升富文本编辑体验。

weixin_29001419的博客 882

wangeditor富文本编辑器使用过程中遇到的问题以及解决办法

wangeditor富文本编辑器使用过程中遇到的问题以及解决办法

完颜振江 3526

Vue中使用富文本编辑器wangEditor(包括图片上传)

​​​​1.vue中安装wangEditor 使用npm安装:npm install wangeditor --save 2.创建公共组件 在components中创建editor文件 组件内容为: <template lang="html"> <div class="editor"> <div ref="toolbar" class="to...

qq_43579192的博客 1351

通俗地解释一下 EMD(经验模态分解,Empirical Mode Decomposition)

EMD 就像把一碗“混在一起的面条”分成不同粗细的面条,方便你逐层分析每种波动。

qlkaicx的博客 1249

Vue2集成wangEditor富文本编辑器:组件封装、图片上传与踩坑排查

富文本编辑器是后台管理系统中替代纯 textarea 的可视化内容输入组件,核心原理是基于 contenteditable/DOM 将编辑操作转换为 HTML,并通过工具栏命令、内容回显和上传扩展完成结构化内容生产。它的技术价值在于提升文章排版效率、沉淀可复用表单组件,并在内容安全与样式隔离上提供工程化控制。典型应用覆盖文章发布、公告编辑、商品详情等后台内容模块。在 Vue2 项目中接入轻量开源方案 wangEditor 时,重点通常落在 v-model 双向绑定、图片上传异常处理、光标跳动、工具栏层级、样

weixin_29003437的博客 242

欧姆龙SYSMAC STUDIO如何与基恩士SR-1000进行EIP通信

简要介绍一下扫码枪和欧姆龙sysmac的配置

weixin_42031602的博客 4785

wangEditor图片上传

1.图片上传 var E = window.wangEditor var editor = new E('#editorMenu','#editor') //开启debug模式 editor.customConfig.debug = true; // 关闭粘贴内容中的样式 editor.customConfig.pasteFilterStyle = false // 忽略粘贴内容...

王明晓的博客 1万+

告别软件轮询!用STM32G474的COMP比较器实现纳秒级硬件过压保护(CubeMX配置详解)

本文详细介绍了如何利用STM32G474的COMP比较器实现纳秒级硬件过压保护,通过CubeMX配置详解,展示了硬件比较器相比传统软件轮询方案在响应时间、CPU占用和可靠性等方面的显著优势。文章还提供了实战配置流程和优化技巧,帮助工程师快速构建高效的硬件保护系统。

weixin_28683689的博客 351

K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点

分类知识   分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中。机器学习中常见的分类算法有:SVM(支持向量机)、KNN(最邻近法)、Decision Tree(决策树分类法)、Naive Bayes(朴素贝叶斯分类)、Neural Networks(神经网络法)等。   但当对海量数据进行分类时,为了降低数据满足分类算法要求所需要的预处理代价,往往需要选...

zhf的博客 1万+

vue中使用wangeditor富文本编辑器(含图片上传和回显)

最近在写vue的项目中,遇到一个需求,点击编辑,显示弹框,在弹框中的富文本编辑器中编辑自定义文本样式,可以上传图片并回显。编辑完成确定后显示在页面上。 首先先写一个editor.vue的页面。(建议单独写一个页面,以后有其他需要用到的地方直接引用就可以了) <template> <div> <div ref="editor"></div> </div> </template> <script> impo

ssssummer的博客 1万+

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3288

富文本编辑器wangEditor的使用(即学即用)

富文本编辑器wangEditor

kid00712138的博客 2万+

四足机器人——机械结构

目录 一、四足机器人腿型: 1、并联腿 2、串联腿 3、 腿的布局(关节配置) 二、四足机器人足端设计: 三、四足机器人膝关节驱动: 1、皮带轮驱动: 2、四连杆或者推杆驱动 四、四足机器人机械整体结构设计细节 一、四足机器人腿型: 1、并联腿 优点:受力角度来说,并联腿比串联腿好,并联腿较为灵活。 2、串联腿 优点:运动范围大 3、 腿的布局(关节配置) 为了使机器人具有较好的稳定性,一般会采用比较低的重心。这就导致了机器人腿的髋关节位置需要位于机器人身体的两侧..

m0_58585940的博客 3万+

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 330

wangEditor富文本编辑器(第三章:图片上传)

目录前言一、思路?1.修改上传方式二、全部流程总结接上一章字数限制做好后,这一章要解决一下图片上传得问题,官方中得图片是转成了base格式,但是现实情况下就是要调用后端接口上传照片,所以我们这章主要是修改图片上传得默认接口~。默认是有上传图片的,并且是两个选项,如下: 这里我们只需要一个上传图片,所以要先隐藏这个下拉,点击图片菜单后直接弹出图片选择,如下: 如何做呢?在editor.create()之前写下面这句: 二、全部流程 注释很详细了,代码如下: 总结 以上就是今天要讲的内容,本文

DW14687的博客 1万+

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6103

富文本编辑器 wangeditor 的使用

vue富文本编辑器王editor使用

qq_36203432的博客 9353

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

wangeditor富文本编辑器的一些坑

看到优快云都在用wangeditor而且用起来的确简单,可是图片上传还是一直搞不定。 1.返回格式问题 官方要求返回json格式,先定义字典赋值,然后采用json.dumps(result,ensure_ascii=False)进行后端返回: { "errno": 0, "data": [ "图片1地址", "图片2地址", ...

helixsky的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

即学即用的富文本编辑器---wangEditor

在项目编写中,会遇到编写富文本编辑器。这里推荐一个比较容易上手且全面的富文本编辑器--wangEditor:里面拥有加粗、下划线、斜体、大小写、字体字号、排序、图片上传、表格等等文本编辑功能。

tomtomgogo的博客 3140

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

wangEditor的使用和图片上传服务器

1.官方文档:https://www.kancloud.cn/wangfupeng/wangeditor3/332599 2.下载地址: https://github.com/wangfupeng1988/wangEditor/releases 3.导入所需要的js文件 <script src="${request.contextPath}/statics/libs/wangEditor....

weixin_45935570的博客 2783

关于在vue项目中使用wangEditor以及踩坑填坑

1,vue中安装wangEditor 进入项目目录, 使用的npm安装 npm install wangeditor 2,创建公用组件 在components中创建wangEnditor文件夹 组件内容为 <template lang="html"> <div class="editor"> <div ref="toolbar" class="toolbar"> </div> <div ref="editor" class="

疑问 搜索 动手 解决 记录 1万+

thinkphp5--wangeditor富文本编辑器图片上传的设置

卤煮在项目中初次接触到wangeditor,为此踩了不少坑,特别是涉及到图片上传的部分,更是伤亡惨重,好在经过好几个小时的煎熬以后,卤煮终于征服了它,实在是可喜可贺,嘿嘿嘿!为了日后遇见同样问题不犯蒙,也希望碰到同样难题的老哥们可以有个参考,遂写下这篇文章,与诸君共勉! ↓↓以下为正文↓↓ wangeditor富文本编辑器相对于时下热门的编辑器,具有界面简洁、文档易懂、轻量、开源等优点,我个人比较...

qq_42602936的博客 2127

使用富文本编辑器wangEditor完成图片文件的上传

项目中一些特定的功能可能需要在页面中用到富文本编辑器来实现文件的输入上传等等,在这里用wangEditor来实现使用富文本编辑器进行文件图面的输入和上传保存,这里wangEditor也可以参考wangEditor使用文档 1.引入相关的wangEditor.js和jquery文件: <head> <script type="text/javascript" src="/stati...

大房子爱生活的博客 5733
上一篇: 使用SpringBoot+MyBatis+MySQL实现图片上传
下一篇: 算法应用之分治法
zcczero
博客等级 码龄9年 38粉丝 24原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值