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

在PyCharm中配置使用Anaconda环境

在PyCharm中配置使用Anaconda环境一、步骤1.Anaconda2.PyCharm总结 一、步骤 1.Anaconda 如未安装Anaconda可至其官网下载,学习使用个人版就可以了。 下载地址:https://www.anaconda.com/products/individual 1、打开Anaconda Navigator,点击Environments可以看到anaconda中已经有了默认的“base”环境,其中包含了大多数我们会用到的包,在PyCharm中可以直接使用该环境,而无需自行下载

TuckX的博客 19万+

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

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

weixin_29003437的博客 242

Cesium高效渲染海量GeoJSON数据的7种优化策略与实战解析

本文深入解析Cesium高效渲染海量GeoJSON数据的7种优化策略,包括瓦片化转换、LOD分级加载、数据简化等关键技术。通过实战案例展示如何解决渲染卡顿问题,提升矢量数据加载性能,实现流畅的60FPS交互体验。特别针对GeoJSON大数据量场景提供完整优化方案。

h0i1j2k3l的博客 934

wangEditor图片上传

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

王明晓的博客 1万+

primetime如何做voltage scaling

存在这样的情况,标准单元库只有ssgnp0p72vm40c和ssgnp0p9vm40c的libs,但是我们希望它工作在ssgnp0p76vm40c,这样的话就需要用ssgnp0p72vm40c和ssgnp0p9vm40c的libs来scaling出ssgnp0p76vm40c的lib。

qq_34326957的博客 1685

RK3588设备树调试实战:解决NPU不加载、USB3.0识别异常与DP显示问题

本文深入探讨了RK3588设备树调试中的三大典型问题:NPU不加载、USB3.0识别异常与DP显示问题。通过详细的问题定位步骤、关键设备树修改和调试技巧,帮助开发者快速解决硬件适配中的挑战,提升RK3588平台的开发效率。

weixin_30576827的博客 477

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

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

ssssummer的博客 1万+

从SPI协议到文件系统:手把手教你用HAL库给W25Q16移植FATFS(附扇区管理优化方案)

本文详细介绍了如何在STM32平台上,通过HAL库的SPI接口为W25Q16 Flash芯片移植FATFS文件系统。文章从SPI通信基础讲起,深入解析了FATFS底层驱动(diskio.c)的移植要点,并重点探讨了针对W25Q16的4KB物理扇区特性进行扇区管理优化的两种方案,旨在帮助开发者构建稳定高效的文件存储方案。

happy2的博客 1043

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

富文本编辑器wangEditor

kid00712138的博客 2万+

2026年3月GESP真题及题解(C++七级):物流网络

2026年3月GESP真题及题解(C++七级):物流网络

王老师青少年编程 1126

【雕爷学编程】Arduino动手做(75)---TTL转RS-485模块之二线制可以实现真正的多点双向通信

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验七十五:TTL转RS-485模块 MAX485 RS485模块 MAX485 是一个8.

雕爷学编程 1万+

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

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

DW14687的博客 1万+

2025爬虫实战:某音直播间实时弹幕获取原理及源码分析

某音直播弹幕虽然没有直接挂在 DOM 上,但由于用的是西瓜播放器,弹幕是通过 JS 接口动态渲染的,这就给了我们 Hook 的机会。关键点是找到调用的位置,然后拦截并输出对象里的message字段。这个思路其实也适用于其他前端渲染的播放器,比如 B 站的 DPlayer、HLS.js、甚至很多自研播放器都有类似结构。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1815

富文本编辑器 wangeditor 的使用

vue富文本编辑器王editor使用

qq_36203432的博客 9353

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值