百度ueditor vue项目应用 -- 图片上传源码修改
本文目的有两个,一、废掉单图上传,二、改造多图上传
大家都知道百度ueditor不是针对vue项目开发的,官方文档提供的源码包里有需要后端配置的接口,but到vue项目就不太好办了,网上有些文章也介绍了如何把这个编辑器整合到vue项目中去,但涉及到图片上传的部分都没用,ueditor.config.js中有个serverUrl配置项,作用就是设置图片上传接口,把后端给的接口填进去,结果是单图无法上传,多图可以上传,这里就是对单图和多图上传进行修改。
一、废掉单图上传
打开ueditor.all.js大概在28464行有一段初始化简单上传插件的ui代码,直接给注释掉就行了

二、改造多图上传
先说说多图上传存在的问题,这里用的是“多图上传” -> “本地上传”,图片上传后不论成功与否都没有删除按钮,如果用户误传了一张图片想删掉都不行,必须把整个弹窗都关掉,如果已经上传了很多张是比较蛋疼的。另一个问题是插件对图片上传接口返回参数有限制,必须是这么写,但后端大佬实在没空改,只能自己动手改源码了。
先来看看怎样给上传的缩略图增加删除按钮:

插件原来是没有这个小叉叉的,改源码需要做到三件事:
a、添加一个小叉叉按钮
b、点击叉叉删掉缩略图UI
c、如果这张图已经上传成功,即使缩略图UI删掉了,点确定还是会插入编辑器中,这里也要处理
如何添加叉叉按钮?
打开“dialogs/image/image.js”文件,大概在738行有个监听上传成功的函数,如下:

红框内的代码就是我添加的删除按钮,css样式这里就不写了,可以自定义,当然这段代码跟你的还有些许不一样,后面再说。这段代码就是根据图片成功与否做的监听,我们在上传成功和失败的情况下都要添加删除按钮。还有一种情况就是选择了图片不上传,这种情况也是应该能删除的,插件已经做了。插件有个addFile函数,作用是 “当有文件添加进来时执行,负责view的创建”,本来是想在这里增加删除按钮的,但会造成选图而不上传情况下的删除按钮重复。
如何实现点击叉叉删除缩略图UI?
我这里是采用事件监听方式实现的,在addFile函数下面增加了一个监听函数,如下:
document.addEventListener("click", function (event) {
var target = event.target.getAttribute("data-hook")
if (target && target.toLowerCase() === 'closeoversizeimg') {
var delNode = event.target.parentNode, parentNode = delNode.parentNode
var imgUrl = $(delNode).find('img').attr("_src")
var imgIndex = 10000000000000
_this.getInsertList().forEach(function (item, index) {
if(item.src.indexOf(imgUrl) > -1) {
imgIndex = index
}
})
_this.imageList.splice(imgIndex, 1) // 删除数据
removeFile(delNode) // 删除UI
}
}, false)
这段代码实现了两个功能,删除UI及删除imageList中对应的数据
删除imageList中对应数据的目的,就是防止UI图删除之后,点击确定按钮依然会把图片插入编辑区。
插件有个imageList属性,这个属性中存放的就是即将要插入编辑区的图片。删除这个数据并不是件容易的事,因为缩略图UI和imageList之间没有直接的对应关系,插件本身就没这功能,要命的是vue把图片的src给转成了base64编码,导致我无法直接根据图片地址进行比较,经过试验我采用的方法是这样的。
还是那个监听上传成功的那段代码:

当你选择图片后,插件就会渲染缩略图UI,我的处理方法是上传成功后给img元素增加一个_src属性,这个属性就是后端返回的图片路径,然后把这个路径跟imageList中的数据进行对比,如果一致就删除,你可以往上翻翻,找到那段
document.addEventListener("click", function (event) { // .... })
代码,里面就是这么做的。
最后再顺便说下,插件是根据{state: 'success'},来判断图片是否上传成功的,如果你们后端返回的不是这个,自己改下监听程序即可,就是下面这段代码:

百度ueditor vue项目应用 -- 图片上传源码修改的更多相关文章
- 移动端vue项目的图片上传插件
有一移动端项目,使用的vant-ui.可是vant自带的Uploader似乎不支持一次选择多张图片上传的功能. 于是乎:在https://www.npmjs.com/查找发现找到 vue-upload ...
- maven上传源码到私服
上传源码 项目中采用了分模块的方式构建,直接将maven-source-plugin写到父pom中,尝试了很多次发现源码一直不能上传到私服中,纠结了很长时间才发现原来多模块项目和普通一个项目的配置是有 ...
- 深入springMVC源码------文件上传源码解析(下篇)
在上篇<深入springMVC------文件上传源码解析(上篇) >中,介绍了springmvc文件上传相关.那么本篇呢,将进一步介绍springmvc 上传文件的效率问题. 相信大部分 ...
- 关于editor网页编辑器ueditor.config.js 配置图片上传
最近公司项目在做一个门户网站,其中新闻和简介等部分使用到了ueditor编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的 ...
- spring mvc:ueditor跨域多图片上传失败解决方案
公司在开发一个后台系统时需要使用百度的UEditor富文本编辑器,应用的场景如下: UEditor的所有图片.js等静态资源在一个专有的静态服务器上: 图片上传在另外一台服务器上: 因为公司内部会使用 ...
- 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...
- 用Vue来实现图片上传多种方式
没有业务场景的功能都是耍流氓,那么我们先来模拟一个需要实现的业务场景.假设我们要做一个后台系统添加商品的页面,有一些商品名称.信息等字段,还有需要上传商品轮播图的需求. 我们就以Vue.Element ...
- ueditor使用canvas在图片上传前进行压缩
之前就看到H5使用canvas就可以在前端使用JS压缩图片,这次接到任务要把这个功能嵌入到ueditor里面去,以节省流量,减轻服务器压力. H5使用canvas进行压缩的代码有很多,核心原理就是创建 ...
- vue移动端图片上传压缩
上传压缩方法 import {api} from '../../api/api.js'; import axios from 'axios'; export function imgPreview ( ...
随机推荐
- 通过rng-tools自动补充熵池
通过rng-tools自动补充熵池原文 https://blog.csdn.net/tiantao2012/article/details/78792046首先查看系统当前熵池的大小# cat /pr ...
- Java的IO流架构
输入输出是指应用程序与外部设备及其他计算机进行数据交流的操作,如读写硬盘数据.向显示器输出数据.通过网络读取其他节点的数据等.任何一种编程语言必须拥有输入输出的处理方式,Java语言也不例外.Java ...
- Redhat Linux下如何使用KVM虚拟机(视频)
KVM(kernel-basedVirtualMachine)是一个开源的系统虚拟化模块,自Linux2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所以相 ...
- C#开发 —— 异常处理
System.ArithmeticException 在算术运行期间发生异常 System.ArrayTypeMismatchException 存储元素的实际类型与数组的实际类型不兼容而导致存储失败 ...
- logrotate---日志分割
logrotate命令用于对系统日志进行轮转.压缩和删除,也可以将日志发送到指定邮箱.使用logrotate指令,可让你轻松管理系统所产生的记录文件.每个记录文件都可被设置成每日,每周或每月处理,也能 ...
- CodeForcesGym 100502H Clock Pictures
Clock Pictures Time Limit: 1000ms Memory Limit: 524288KB This problem will be judged on CodeForcesGy ...
- FZU 1962 新击鼓传花游戏
新击鼓传花游戏 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original ID: 19 ...
- C# WPF开源控件库MaterialDesign介绍
介绍 1.由于前端时间萌发开发一个基础架构得WPF框架得想法, 然后考虑到一些界面层元素统一, 然后就无意间在GitHub上发现一个开源WPF UI, 于是下载下来了感觉不错. 官网地址:http:/ ...
- Struts2+Spring+Hibernate step by step 06 整合Hibernate
注:该系列教程.部分内容来自王健老师编写ssh整合开发教程 Hibernate是一款优秀的ORM(Object Relation Mapping-对象关系映射图)工具.与Struts.Spring项目 ...
- swift 一疑问:reduce
var products = [ Product(name: "Kayak", description: "A boat for one person",p ...