UEditor调用上传图片、上传文件等模块

来源:https://www.cnblogs.com/lhm166/articles/6079973.html

说到百度富文本编辑器ueditor(下面简称ue),我不得不给它一个大大的赞。我们在网站建设、前端开发时,网站的内容管理就使用了它。对于它的多图片上传和附件上传,个人感觉很好用,我就琢磨着是否可以外部调用多图上传和附件上传组件为自己所用,并封装成一个插件,节省单独开发的成本。

有了这个想法后,着手操作,理下实现思路,得出实现的关键在于监听这两个组件在编辑器里的插入动作。打开源码,苦心研究,皇天不负苦心人,终于摸索出解决方法,现在分享出来,给拥有同样想法的小伙伴,为网站建设届尽一份力。

注:本文基于UEditor1.4.3.3版本。

1、引入ue相关文件,写好初始代码

为了更好的封装整一个单独的插件,这里我们要做到示例化ue后隐藏网页中的编辑窗口,并移除焦点。

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>外部调用UEditor的多图上传和附件上传</title>
    <script type="text/javascript" charset="utf-8" src="ueditor.config.js"></script>
    <script type="text/javascript" charset="utf-8" src="ueditor.all.js"></script>
    <style>
            ul{display: inline-block;width: 100%;margin: 0;padding: 0;}
            li{list-style-type: none;margin: 5px;padding: 0;}
        </style>
</head>
<body>
<h1>外部调用UEditor的多图上传和附件上传示例</h1>

<button type="button" id="j_upload_img_btn">多图上传</button>
<ul id="upload_img_wrap"></ul>

<button type="button" id="j_upload_file_btn">附件上传</button>
<ul id="upload_file_wrap"></ul>

<!-- 加载编辑器的容器 -->
<textarea id="uploadEditor" style="display: none;"></textarea>

<!-- 使用ue -->
<script type="text/javascript">

    // 实例化编辑器,这里注意配置项隐藏编辑器并禁用默认的基础功能。
 var uploadEditor = UE.getEditor("uploadEditor", {
        isShow: false,
        focus: false,
        enableAutoSave: false,
        autoSyncData: false,
        autoFloatEnabled:false,
        wordCount: false,
        sourceEditor: null,
        scaleEnabled:true,
        toolbars: [["insertimage", "attachment"]]
    });

    // todo::some code

</script>
</body>
</html>

  2、监听多图上传和上传附件组件的插入动作

uploadEditor.ready(function () {
    // 监听插入图片
    uploadEditor.addListener("beforeInsertImage", _beforeInsertImage);
    // 监听插入附件
    uploadEditor.addListener("afterUpfile",_afterUpfile);
});

  

3、自定义按钮绑定触发多图上传和上传附件对话框的事件

我们对id="j_upload_img_btn"和id="j_upload_file_btn"的两个button绑定触发ue多图上传和上传附件对话框的事件,这样我们才能够操作ue。

document.getElementById(‘j_upload_img_btn‘).onclick = function () {
    var dialog = uploadEditor.getDialog("insertimage");
    dialog.title = ‘多图上传‘;
    dialog.render();
    dialog.open();
};

document.getElementById(‘j_upload_file_btn‘).onclick = function () {
    var dialog = uploadEditor.getDialog("attachment");
    dialog.title = ‘附件上传‘;
    dialog.render();
    dialog.open();
};

  

4、多图上传

多图上传的核心在于“beforeInsertImage”动作,此动作返回已选图片的信息集合。

function _beforeInsertImage(t, result) {
    var imageHtml = ‘‘;
    for(var i in result){
        imageHtml += ‘<li><img src="‘+result[i].src+‘" alt="‘+result[i].alt+‘" height="150"></li>‘;
    }
    document.getElementById(‘upload_img_wrap‘).innerHTML = imageHtml;
}

  

5、新增“afterUpfile”动作

对于附件上传,ue源码中并未提供插入动作的相关事件,所以这里我们手动添加一个触发动作“afterUpfile”。

打开“ueditor.all.js”,搜索代码:

me.execCommand(‘insertHtml‘, html);   //在此代码后插入以下代码
me.fireEvent(‘afterUpfile‘, filelist);

  这样我们就新增了“afterUpfile”事件。

这里核心在于 “fireEvent”。

6、附件上传

上一步中我们新增了“afterUpfile”动作,这里直接监听就可以了。

function _afterUpfile(t, result) {
    var fileHtml = ‘‘;
    for(var i in result){
        fileHtml += ‘<li><a href="‘+result[i].url+‘" target="_blank">‘+result[i].url+‘</a></li>‘;
    }
    document.getElementById(‘upload_file_wrap‘).innerHTML = fileHtml;
}

  

以下是完整代码:

注:本文基于UEditor1.4.3.3版本。

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>外部调用UEditor的多图上传和附件上传</title>
    <script type="text/javascript" charset="utf-8" src="ueditor.config.js"></script>
    <script type="text/javascript" charset="utf-8" src="ueditor.all.js"></script>
    <style>
        ul{display: inline-block;width: 100%;margin: 0;padding: 0;}
        li{list-style-type: none;margin: 5px;padding: 0;}
    </style>
</head>
<body>
<h1>外部调用UEditor的多图上传和附件上传示例</h1>

<button type="button" id="j_upload_img_btn">多图上传</button>
<ul id="upload_img_wrap"></ul>

<button type="button" id="j_upload_file_btn">附件上传</button>
<ul id="upload_file_wrap"></ul>

<!-- 加载编辑器的容器 -->
<textarea id="uploadEditor" style="display: none;"></textarea>

<!-- 使用ue -->
<script type="text/javascript">

    // 实例化编辑器,这里注意配置项隐藏编辑器并禁用默认的基础功能。
 var uploadEditor = UE.getEditor("uploadEditor", {
        isShow: false,
        focus: false,
        enableAutoSave: false,
        autoSyncData: false,
        autoFloatEnabled:false,
        wordCount: false,
        sourceEditor: null,
        scaleEnabled:true,
        toolbars: [["insertimage", "attachment"]]
    });

    // 监听多图上传和上传附件组件的插入动作
 uploadEditor.ready(function () {
        uploadEditor.addListener("beforeInsertImage", _beforeInsertImage);
        uploadEditor.addListener("afterUpfile",_afterUpfile);
    });

    // 自定义按钮绑定触发多图上传和上传附件对话框事件
 document.getElementById(‘j_upload_img_btn‘).onclick = function () {
        var dialog = uploadEditor.getDialog("insertimage");
        dialog.title = ‘多图上传‘;
        dialog.render();
        dialog.open();
    };

    document.getElementById(‘j_upload_file_btn‘).onclick = function () {
        var dialog = uploadEditor.getDialog("attachment");
        dialog.title = ‘附件上传‘;
        dialog.render();
        dialog.open();
    };

    // 多图上传动作
 function _beforeInsertImage(t, result) {
        var imageHtml = ‘‘;
        for(var i in result){
            imageHtml += ‘<li><img src="‘+result[i].src+‘" alt="‘+result[i].alt+‘" height="150"></li>‘;
        }
        document.getElementById(‘upload_img_wrap‘).innerHTML = imageHtml;
    }

    // 附件上传
 function _afterUpfile(t, result) {
        var fileHtml = ‘‘;
        for(var i in result){
            fileHtml += ‘<li><a href="‘+result[i].url+‘" target="_blank">‘+result[i].url+‘</a></li>‘;
        }
        document.getElementById(‘upload_file_wrap‘).innerHTML = fileHtml;
    }
</script>
</body>
</html>

  

原文地址:https://www.cnblogs.com/cblx/p/10376558.html

时间: 2024-11-09 03:04:38

UEditor调用上传图片、上传文件等模块的相关文章

教你如何调用百度编辑器ueditor的上传图片、上传文件等模块

出于兴趣爱好,前段时间自己尝试写了一个叫simple的cms,里面使用了百度ueditor编辑器,发现它的多图片上传模块很不错,用起来很方便,又可以选择已经上传好的图片.正好我又是个懒人,发现有现成的自己就不想新开发了.于是我就想,是不是可以调用这个上传模板为自己所用呢? 有了这个想法后,我就到网上查阅资料,可惜资料少的可怜,都不能很好解决我的问题.于是觉得还是自己动手丰衣足食,皇天不负苦心人,终于摸索出解决方法,现在分享出来,和自己有同样想法的小伙伴. 代码如下: <html> <he

调用接口上传文件遇到http状态404失败

当上传一个超过30M的文件时,服务器会重定向至404.13页面,报错如下: HTTP Error 404.13 - Not Found The request filtering module is configured to deny a request that exceeds the request content length. 这是由于服务器限制了所能上传文件的最大值.其值在configuration/system.webServer/security/requestFiltering

ueditor浏览器 无法上传文件.问题

dll也都引用了 路径绝对tmd没问题 最后 我一点一点的调试发现了问题 草tmd百度程序员 */UE.ajax = function() { //创建一个ajaxRequest对象 var fnStr = 'XmlHttpRequest()';            <====================================你妈的  你tmd测试了吗 这里 应该是XMLHttpRequest try { new ActiveXObject("Msxml2.XMLHTTP&

【UEditor】 UEditor整合项目上传资源到阿里云服务器

目录 关于此文 下载源码 JSP代码 Java代码 阿里云jar包引入配置 成功啦! 回到顶部 关于此文 项目中要实现编辑器生成带格式的html文档,存入模板,最后生成html的URL,所以选择了UEditor. UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点. 之前没有接触过编辑器,从头开始摸索.看API,看网上的例子.之前,用的是UMeditor,是UEditor的mini版本.用的人少,例子也少.让我很苦恼.之后又换回了完整版

服务器上传文件出现500错误,但是其他不涉及文件的接口均正常

出现的情景描述: 1.有用户报告说注册无法成功,经过前端的盘查发现实在注册的时候必须调用的上传文件的接口A抛出500错误,但不是每次都抛出不过有很大几率抛出500. 2.A接口接受5个参数和一个文件multi类型,至传递前5个参数能够请求到代码,但是传入文件之后不是500错误就是很长时间超时. 3.重启nginx无效,问题依旧.重启fpm无效,问题依旧. 4.机器很久没有启动过了top显示内存占用较高于是重启机器.重启机器问题消失,A接口正常工作,15分钟后再次出现问题且症状依旧. 5.ngin

Hessian学习总结(二)——使用hessian上传文件

hessian较早版本通过 byte[] 进行文件传输:4.0之后支持 InputStream 作为参数或返回值进行传输. 注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出.可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决. 一.创建Hessian服务端 创建一个FileUploader Web项目作为文件上传的服务端,如下图所示: 1. 1.创建文件上传服务接口FileUploadServiceI FileUploadServiceI接口代码如

解决上传文件或图片时选择相同文件无法触发change事件的问题

昨天在做一个上传文件的模块时遇到了这样的问题:打开文件一上传,上传成功后再次点击文件一,change事件无反应 <input type="file" name="file" class="file-input" @change="setFile" /> 在网上查了一番发现,当第一次选择文件一上传时,存放的文件由空变成了文件一,上传成功后,再次选择文件一,此时就相当于没有change,所以两次选择相同的文件不会触发c

使用XWAF框架(2)——上传文件

XWAF提供了上传文件的HttpFileUploader工具类,具备强大的多文件上传.文件类型过滤.文件大小限制.存储目录设置.文件名称更改等功能,简化了Web应用开发的编程工作. 它能同时解析表单参数和文件域,不仅能够将文件保存到服务器上,还能同时提取表单参数的值. 如果要在保存上传文件之前提取参数值,就需要先调用"parseRequest()"方法,并使用该方法返回的对象替换request变量,然后再使用getParameter(name) 方法提取参数值. 参考代码如下: pri

KindEditor单独上传图片、单独上传文件、编辑器的通用设置与调用

KindEditor.ready(function(K){ var editor = K.editor({ allowFileManager:true }); // 上传图片 K('#imageBtn').click(function(){ editor.loadPlugin('image', function(){ editor.plugin.imageDialog({ imageUrl:K('#image').val(), clickFn:function(url){ K('#image')