UEditor单图上传跨域问题解决方案
UEditor
UEditor是百度团队提供的富文本编辑器
git地址为:https://github.com/fex-team/ueditor
在最近的项目中使用了该插件作为项目的富文本编辑器
由于种种原因项目需要采用前后分离的方式,所以会导致该插件的单图上传功能出现跨域问题(CORB)
官方对于该问题给出的答复为:

由于时间关系来不及改换其他的富文本编辑器,所以在源码中进行了魔改
用自己的方式来解决了这一问题,发挥想象力
,故发文分享
代码实现
首先我们需要在三万三千行代码中找到原本的单图上传部分的代码,在 ueditor.all.js 文件中
我们可以在代码编辑器中搜索 simpleupload

如上图所示
然后找到上传图片的部分代码

然后把插件为 input 绑定的事件注释掉
在该代码的后面添加以下代码:
// 单图上传
input.onchange = function(){
if (!input.value) return;
var loadingId = "loading_" + (+new Date()).toString(36);
var params =
utils.serializeParam(me.queryCommandValue("serverparam")) || ""; var imageActionUrl = me.getActionUrl(me.getOpt("imageActionName"));
var allowFiles = me.getOpt("imageAllowFiles"); me.focus();
me.execCommand(
"inserthtml",
'<img class="loadingclass" id="' +
loadingId +
'" src="' +
me.options.themePath +
me.options.theme +
'/images/spacer.gif">'
);
/* 判断后端配置是否没有加载成功 */
if (!me.getOpt("imageActionName")) {
errorHandler(me.getLang("autoupload.errorLoadConfig"));
return;
}
// 判断文件格式是否错误
var filename = input.value,
fileext = filename ? filename.substr(filename.lastIndexOf(".")) : "";
if (
!fileext ||
(allowFiles &&
(allowFiles.join("") + ".").indexOf(fileext.toLowerCase() + ".") ==
-1)
) {
showErrorLoader(me.getLang("simpleupload.exceedTypeError"));
return;
} var formData = new FormData()
formData.append('upfile', input.files[0]);
// 替换你的URL
$.ajax('你的服务器上传路径',{
data: formData,
processData:false,
contentType: false,
type:"post",
success:function(data){
console.log(data)
try{
var link,
json,
loader;
json = JSON.parse(data);
link = '服务器存放图片的路径' + json.url;if (json.state == "SUCCESS" && json.url) {
loader = me.document.getElementById(loadingId);
domUtils.removeClasses(loader, "loadingclass");
loader.setAttribute("src", link);
loader.setAttribute("_src", link);
loader.setAttribute("alt", json.original || "");
loader.removeAttribute("id");
me.fireEvent("contentchange");
} else {
showErrorLoader && showErrorLoader(json.state);
}
} catch (er) {
console.log(er)
showErrorLoader &&
showErrorLoader(me.getLang("simpleupload.loadError"));
}
}
})
}
为了方便使用了jquery的Ajax来进行图片上传
需要注意的是:
processData:false,
contentType: false,
processData这里是防止Ajax将图片文件转换为字符串上传
contentType是让Ajax不要添加contentType头,以便浏览器自动添加文件边界
结语
最后说一句: "珍爱生命远离,不维护插件"
希望能对大家有所帮助
UEditor单图上传跨域问题解决方案的更多相关文章
- 文件上传跨域解决方案-jQuery-File-Upload
GIT 下载地址 https://github.com/blueimp/jQuery-File-Upload 亲测HTTPS HTTP跨域无压力 不用自带的DEMO 用下面的DEMO <!DOC ...
- kindedit,uedit 上传跨域返回
1.kindedit 跨域上传图片的时候,a.com 上传到b.com接收图片服务器,然后返回图片地址. 2.一般如果不做任何处理是获取不到返回的信息的.原因是跨域了 3.所以一般在上传成功后,在跳转 ...
- dedecmsv5.7 ueditor编辑器上传视频/修改,视频显示空白,解决方案
dedecmsv5.7 ueditor 在上传视频之后,显示空白.其实是有视频的,就是显示空白.找了资料,记录一下. 解决方案: 找到include下面的ueditor下面的ueditor.all.j ...
- ueditor富文本编辑器跨域上传图片解决办法
在使用百度富文本编辑器上传图片的过程中,如果是有一台单独的图片服务器就需要将上传的图片放到图片服务器,比如在a.com的编辑器中上传图片,图片要保存到img.com,这就涉及到跨域上传图片,而在ued ...
- angularjs跨域post解决方案
转自:http://www.thinksaas.cn/topics/0/34/34536.html 前端同学李雷和后台同学韩梅梅分别在自己电脑上进行开发,后台接口写好的时候,李雷改动完就把前端代码上传 ...
- C#进阶系列——WebApi 跨域问题解决方案:CORS
前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ...
- thinkphp,javascript跨域请求解决方案
javascript跨域请求解决方案 前言 对于很多前端或者做混合开发的同学,我们难免会遇到跨域发起请求业务,比如A站点向B站点请求数据等等.由于最近要做一个站点集群的项目,所以具体业务要求很多个站点 ...
- jquery跨域访问解决方案(转)
客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算 ...
- C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)
C#进阶系列——WebApi 跨域问题解决方案:CORS 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下W ...
随机推荐
- 2017年BackBox5和Ubuntu16.04.1国内更新源
BackBox是基于Ubuntu的Linux发行版,因此,我们可以使用Ubuntu的更新源作为BackBox的更新源. 1.查看系统版本信息: 输入: uname -a 显示计算机及操作系统的有关信息 ...
- Javascript继承,再谈
说到Javascript的继承,相信只要是前端开发者都有所了解或应用,因为这是太基础的知识了.但不知各位有没有深入去理解其中的玄机与奥秘.今本人不才,但也想用自己的理解来说一说这其中的玄机和奥秘. 一 ...
- Sublime 3基于python环境的使用
.Ctrl+Shift+R 自动调整格式 打开Sublime Text 新建一个Python的编译系统 { "cmd": ["C:\\python\\python.exe ...
- 在腾讯云(windows)上搭建node.js服务器
1:安装Node.js 使用MSI文件,并按照提示安装node.js,默认情况下,安装程序将 Node.js 发行到 C:\Program Files\nodejs. 但这里我们需要修改安装路径到:D ...
- 一个靠谱的phpredisadmin文件
http://download.csdn.net/detail/newjueqi/7227487
- python反编译工具
开发类在线工具:https://tool.lu/一个反编译网站:https://tool.lu/pyc/ 一看这个标题,就是搞坏事用的, 用 java 写程序多了,很习惯用反编译工具了,而且玩java ...
- Dubbo中集群Cluster,负载均衡,容错,路由解析
Dubbo中的Cluster可以将多个服务提供方伪装成一个提供方,具体也就是将Directory中的多个Invoker伪装成一个Invoker,在伪装的过程中包含了容错的处理,负载均衡的处理和路由的处 ...
- 1.1 为什么要使用lambda 表达式
第1章 lambda 表达式 1.1 为什么要使用lambda 表达式 1.2 lambda 表达式的语法 1.3 函数式接口 1.4 方法引用 1.5 构造器引用 1.6 变量作用域 1.7 默认方 ...
- BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...
- BZOJ_4269_再见Xor_线性基
BZOJ_4269_再见Xor_线性基 Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行 ...