关于wangEditor的图片上传失效的解决办法

本文详述了在使用wangEditor富文本编辑器时,因首页加载即创建编辑器导致的功能失效问题,特别是图片上传功能。通过动态删除并重建编辑器的方法,解决了多次上传数据时的编辑器复用难题。

相信用过wangEditor的程序员(媛)都知道,这是一个轻量级富文本编辑器,每每用它的时候总有一种麻雀虽小,五脏俱全的感觉,挺好用的!

但是偶尔也会有些小坑踩踩,接下了我将介绍一个在我的业务里面遇到的坑。。。

业务介绍,该编辑器我是在上传数据时用到的,每一条数据都会绑定至少一个或者是一个以上的编辑器,为提高效率,我让其在首页加载时就创建所需的编辑器,也避免了在重新打开一条记录进行上传或修改时,编辑器的重复创建。

但是,就是因为这个逻辑,编辑器在首页加载时就创建成功了,当我修改或新上传完一条数据的时候,再点开一条新的记录进行修改操作,或者添加新数据的操作时,编辑器中的图片上传功能,可能还有其他功能,就会失效了,需要重新刷新页面,让编辑器重新加载后,方才可以进行下一步的数据上传工作,如此,没上传一条记录,就尽行一次刷新操作,实在是太麻烦了。。

怎么办呢,推到重来吧。。。

既然他在重新刷新后,编辑器重建后才能生效,就不能让它在首页加载时只创建一次编辑器了。所以,只能让它在用户执行修改,和新建操作时的点击按钮上绑定编辑器创建功能,同时还要删除之前已创建好的编辑器,跟了前台页面以后才知道,创建好的编辑器被div包裹,所以在这里用了一些前台动态删除div的办法。

①自己定义一个div,将要动态生成的编辑器包裹起来,在我定义的div里边,还包裹着图片上传的div,代码如下:

......省略代码
<div class="eiderDiv">  //包裹编辑器的div
        <div id="abstract" name="abstract" style="height:550px;max-height:600px;">//绑定编辑器上传图片功能的div
        </div>
</div>
......省略代码

 

②编辑器创建在这里不在细说,在这里说一下如何将建好的编辑器删除

由于我的业务需求是多个编辑器,所以我在这里用到了div的循环遍历;

在修改的业务方法里面,代码如下:

 

。。。。。省略代码
/*清除原编辑器*/
if(editor!=null){
    clearEider();
}
/*创建编辑器*/
creatEider();
。。。。。省略代码

/*清除已生成的编辑器*/
function clearEider () {
 //获取class名为eiderDiv的所有div元素
    var nodes=document.getElementsByClassName("eiderDiv");
/*由于前端页面中的元素是时时刷新变动的,所以务必有这一步将原集合中的长度保留,以免元素新增或删除给循环带来异常*/
    var len=nodes.length;
    //对集合进行循环遍历
    for (var i=len-1;i>=0;i--) {
        //将集合中的每个元素中的页面效果清空
        document.getElementsByClassName('eiderDiv')[i].innerHTML=''; 
    }
/*由于我绑定了编辑器中内容展示的位置,由于上一步将其完全清空,所以这一步不许有,否则前端页面会报编辑器生成时menus报错,但是我这个方法比较笨,我这里有3个编辑器需要生成,需要一一手动添加,大家如果有更好的解决办法,可以在评论里告知我*/

    document.getElementsByClassName('eiderDiv')[2].innerHTML='<div id="abstract2" name="abstract2" style="height:50px;max-height:100px;">\n' +
            '                         </div>';
    document.getElementsByClassName('eiderDiv')[1].innerHTML='<div id="abstract1" name="abstract1" style="height:50px;max-height:100px;">\n' +
            '                        </div>\n' +
            '\t\t\t\t\t\t\t<div>\n' +
            '                    </div>';
    document.getElementsByClassName('eiderDiv')[0].innerHTML='<div id="abstract" name="abstract" style="height:550px;max-height:600px;">\n' +
            '                        </div>';
   //清空表示编辑器的变量中的内容
    editor=null;
    editor1=null;
    editor2=null;
   
}

也可以在用户点击保存后,关掉修改页面,且重新加载当前页面。

$('#active_win').window('close');//关闭活动窗口
window.location.reload();//重新加载当前窗口

 

### 解决方案 #### 1. 粘贴内容过滤与清理 在 wangEditor 中粘贴 Word 内容时,Word 的复杂格式(如 `[if gte mso 9]` 等条件注释)可能导致解析异常。为解决此类问题,可以通过配置 `pasteFilterStyle` 属性,启用内容过滤功能,去除 Word 中的冗余样式和条件注释 [^1]。 ```javascript const E = window.wangEditor const editor = new E('#editor') editor.config.pasteFilterStyle = true // 启用样式过滤 editor.create() ``` 通过该配置,wangEditor 会在粘贴时自动清理 Word 的复杂样式标签,避免 `[if gte mso 9]` 等内容进入编辑器,从而防止展示时出现 JavaScript 语法错误 [^1]。 #### 2. 图片粘贴失效的处理 Word 中的图片通常以 Base64 编码嵌入在 HTML 中,粘贴到 wangEditor 时可能因未正确识别而导致图片无法正常显示。为确保图片粘贴功能正常,可启用 `pasteIgnoreImg` 配置并结合 `customUploadImg` 自定义上传逻辑 [^1]。 ```javascript editor.config.pasteIgnoreImg = false // 允许粘贴图片 editor.config.customUploadImg = function (resultFiles, insertImgFn) { const formData = new FormData() formData.append('file', resultFiles[0]) fetch('/api/upload', { method: 'POST', body: formData }).then(res => res.json()) .then(data => { insertImgFn(data.url) // 插入图片 URL }) } editor.create() ``` 上述配置可确保 Word 中的图片被正确提取并上传至服务器,最终以 URL 形式插入编辑器中,避免因 Base64 数据残留导致粘贴失效 [^1]。 #### 3. 服务器端支持与接口配置 为实现图片粘贴上传,服务器端需提供接收图片上传的接口,并支持 `multipart/form-data` 格式。例如,使用 Node.js + Express 实现的上传接口如下: ```javascript const express = require('express') const formidable = require('formidable') const fs = require('fs') const path = require('path') const app = express() app.post('/api/upload', (req, res) => { const form = new formidable.IncomingForm() form.parse(req, (err, fields, files) => { const file = files.file const newPath = path.join(__dirname, '/uploads/', file.name) fs.renameSync(file.path, newPath) res.json({ url: `http://yourdomain.com/uploads/${file.name}` }) }) }) ``` 该接口接收上传图片文件并保存至指定路径,返回图片的访问 URL,确保粘贴图片功能正常运行 [^1]。 #### 4. 自动化批量处理 Word 图片 若需实现 Word 图片的批量上传而无需手动逐张上传,可集成第三方控件如 `WordPaster`,它支持 Word 内容一键粘贴并自动上传图片,适用于需要高效处理大量文档的场景 [^2]。 #### 5. 增强兼容性与扩展支持 针对 Word 文档中复杂的图片格式(如剪贴画、矢量图等),建议结合 `mammoth.js` 或 `docxtemplater` 等库进行预处理,提取图片后再插入 wangEditor 中,以增强兼容性 [^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值