将UEditor的图片批量上传抠出来单独使用

在Web项目中,经常有这样一个需求,就是对图片的批量上传,利用form表单的file可以实现图片的上传,但是用户体验不好,而且不支持ajax提交,网上也有很多图片上传插件,有基于javascript的,也有基于flash的,但是给我的感觉,要么用户体验不好,要么收费的,那么能不能有一个比较好的方案呢?那就是Ueditor!

UEditor是百度出品的一款富文本编辑器,里面也集成了一个基于Flash的图片上传插件,由于Ueditor是开源的,所以源代码很容易得到,经过我的一番研究,找到了它的图片上传插件的一些猫腻,于是把图片上传插件给独立出来了,形成了一个模块,以后批量图片上传可以直接用。

首先看下UEditor的目录结构:

那么图片上传插件是放到哪里的呢?由于比较分散,所以这部分经验不足,很难找到,可能也是ueditor为了防止滥用吧。请看下图:

把红框内的文件拷贝出来,放到一个新的文件夹下,如图:

把所有文件找到后,接下来就是振奋人心的时候了(编码),当然,javascript代码如何写也是通过研究他的源码实现的,接下来我将源码放出来,各位童鞋只需要使用就行了:

 <script type="text/javascript" src="${ctx }/upload/tangram.js"></script>
	
<div id="flashContainer"></div>
var flashObj = uploadPic();
function uploadPic(){
		$("#flashContainer").html("");
		/*-=-=-=-=-=-=-=全局变量模块-=-=-=-=-=-=-*/
	    //flash初始化参数
	    var flashOptions ={
	        createOptions:{
	            id:'flash',
	            url:'${ctx}/upload/image/imageUploader.swf',//这个就是附件里面的FLASH
	            width:'510',//容器宽度
	            height:'360',//容器高度
	            errorMessage:'Flash插件初始化错误,请更新您的flashplayer版本!',
	            wmode:'window',
	            ver:'10.0.0',
	            // 初始化的参数就是这些,
	            vars:{
	                width:500,      //width是flash的宽
	                height:350,        //height是flash的高
	                gridWidth:115,  // gridWidth是每一个预览图片所占的宽度,应该为width的整除
	                gridHeight:120,  // gridHeight是每一个预览图片所占的高度,应该为height的整除
	                picWidth:100,    // 单张预览图片的宽度
	                picHeight:100,    // 单张预览图片的高度
	                uploadDataFieldName:'picdata',    // POST请求中图片数据的key
	                picDescFieldName:'pictitle',    // POST请求中图片描述的key
	                maxSize:2,                    // 文件的最大体积,单位M
	                compressSize:2,               // 上传前如果图片体积超过该值,会先压缩,单位M
	                maxNum:20,                        // 最大上传多少个文件
	                backgroundUrl:'',               //背景图片,留空默认
	                listBackgroundUrl:'',           //预览图背景,留空默认
	                buttonUrl:'',                   //按钮背景,留空默认
	                compressSide:1,                //等比压缩的基准,0为按照最长边,1为按照宽度,2为按照高度
	                compressLength:700,                // 能接受的最大边长,超过该值Flash会自动等比压缩
	                url:'',   // 上传处理页面的url地址
	                ext:null,//扩展的参数,json格式
	                fileType:'{"description":"图片(*.jpg,*.jpeg,*.png,*.gif)", "extension":"*.gif;*.jpeg;*.png;*.jpg"}'      //上传文件格式限制
	            },
	            container: 'flashContainer'//flash容器id
	        },
	        selectFileCallback:function(selectFiles){//选择文件时的回调函数
	        	selectedImageCount += selectFiles.length;
	        	if(selectedImageCount) baidu.g("upload").style.display = "";
	        	dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮
	        },
	        exceedFileCallback: 'exceedFileCallback',   // 文件超出限制的最大体积时的回调
	        deleteFileCallback: function(delFiles){//删除文件时的回调函数
	        	selectedImageCount -= delFiles.length;
	            	if (!selectedImageCount) {
		            	baidu.g("upload").style.display = "none";
		            	dialog.buttons[0].setDisabled(false); //没有选择图片时重新点亮按钮
	            	}
	        	},
	        startUploadCallback: 'startUploadCallback',  // 开始上传某个文件时的回调
	        uploadCompleteCallback: 'uploadCompleteCallback',   // 某个文件上传完成的回调
	        uploadErrorCallback: function (data){
	            //console && console.log(data);
	        },  // 某个文件上传失败的回调
	        allCompleteCallback: 'allCompleteCallback'// 全部上传完成时的回调
	        //changeFlashHeight: 'changeFlashHeight'     // 改变Flash的高度,mode==1的时候才有用

	    };
	    return new baidu.flash.imageUploader(flashOptions);
	};
/**
        *上传图片
        */
        function upload(){
        	flashObj.upload();
        };
        /**
	     * 文件大小超出时的回调函数
	     * @param   Object
	     */
	    function exceedFileCallback(file){
	        // 参数为Object,{index:在多图上传的索引号, name:文件名, size:文件大小}
	        // 其中size单位为Byte
	        console.log("文件超出大小限制:");
	        console.log(file.index, file.name, file.size);
	        console.log("===================================");
	    };

	    /**
	     * 开始上传单个文件的回调函数
	     * @param   Object
	     */
	    function startUploadCallback(file){

	        console.log("开始上传如下文件:");
	        console.log(file.name, file.size);
	        console.log("===================================");
	    };
	    /**
	     * 单个文件上传完成的回调函数
	     * @param   Object/String   服务端返回啥,参数就是啥
	     */
	        function uploadCompleteCallback(data){
	    		//将url保存到用户信息上
	            console.log("上传成功", data);
	            console.log("===================================");
	        };
	     /**
	      * 单个文件上传失败的回调函数
	      * @param  Object/String   服务端返回啥,参数就是啥
	      */
	        function uploadErrorCallback(data){
	            console.log("上传失败", data);
	            console.log("===================================");
	        };
	     /**
	      * 全部上传完成的回调函数
	      */
	        function allCompleteCallback(data){
	        	 alert(data.message);

	        };

最后上传图片调用upload()就可以了,是不是很简单呢!

时间: 2024-10-26 14:30:56

将UEditor的图片批量上传抠出来单独使用的相关文章

微擎ueditor编辑器图片批量上传顺序混乱的解决方法

上周六有客户反映刚上线的商城管理系统在商品详情页批量上传图片的时候出现图片显示顺序与上传顺序不一致的问题,经排查,发现是编辑器在上传时是按上传完成的顺序插入图片的,即先传完先显示,在网上查了一下,发现很多人都有遇到这个问题,初步认为是ueditor编辑器的bug,于是按照网上的方法去解决,但都没有解决问题,调试查找之后发现网上的解决方法根本不适合微擎的多图上传,因为涉及的文件都没有被调用....无奈只好自己查找,在和同事查找了将近一天之后终于找到了两个相关文件,然后又花了些功夫,最后总算是弄好了

多图片批量上传

零.  前言 网上多数图片批量上传代码老旧不全, 遂成次文, 以节省博友时间 一.  代码实例 前端代码(使用 HTML5 multiple属性来支持多图片批量上传): <form action="" enctype='multipart/form-data' method="post"> <div class="form-item"> <label>上传图片</label> <input t

asp.net+swfupload 多图片批量上传(附源码下载)

asp.net的文件上传都是单个文件上传方式,无法执行一次性多张图片批量上传操作,要实现多图片批量上传需要借助于flash,通过flash选取多个图片(文件),然后再通过后端服务进行上传操作. 本次教程所使用的flash上传文件是 swfupload,下面会有源码下载链接. 使用工具 vs 2010. 演示效果图 第一步 新建一个web项目 第二步 引入所需swfuplod文件(swfupload.swf,js,css等) 第三步 新建一个一般处理程序(upload.ashx) upload.a

KindEditor图片批量上传

KindEditor编辑器图片批量上传采用了上传插件swfupload.swf,所以后台上传文件方法返回格式应为JSONObject的String格式(注). JSONObject格式: JSONObject obj = new JSONObject(); obj.put("error", 0);//0:上传文件成功,1:上传文件失败 obj.put("url", "这里是图片路径,多张图采用英文逗号分隔“,”"); 代码示例: /** * 文件

SSM配置Ueditor实现图片的上传&lt;一&gt;

最近想学点新的东西,于是琢磨着用SSM整合Ueditor来实现图片的上传!至于为什么选Ueditor,道理你懂得啦!百度开发的而且开源,能自定义自己想要的内容,版本更新什么的也比较勤快!接下来我准备记录下探索的过程! 1.下载 点击跳转到Ueditor下载界面 你可以到上面的地址下载Ueditor插件,选择UTF-8编码的Jsp版本. 2.构建工程 新建一个Maven工程,首先把ssm框架的基本的东西搭建好,如果你不清楚ssm基本框架,我博客里面有详细的搭建过程可以参考!在这我就直接上图了! 3

百度编辑器 多图片批量上传 顺序混乱问题 ueditor

前言 ueditor的介绍我就不多说了,大家可直接访问 http://ueditor.baidu.com/website/index.html 正文 问题: ueditor在进行多图上传时,会出现图片书序错乱的问题. 原因: ueditor自从1.4.2版以后,前端上传模块统一改用webuploader,而webuploader是多线程上传的,ueditor对"uploadSuccess"的处理是上传成功一张,就加入到数组中,这样如果图片上传完成顺序是乱的,最终加入文本框的顺序也乱了.

如何利用”七牛云”在UEditor实现图片的上传和浏览

在学习之前,我参考了朋友些的一篇关于这个功能实现的文章,非常不错.大家可以参考:http://www.cnblogs.com/John-Marnoon/p/5818528.html#3501846 里面都写了具体的实现,我也是参照朋友的文章来操作的.现在我重新整理一下实现的步骤: 1 . 注册一个七牛云用户 2.  在七牛云网站中创建一个空间来存储图片,存储区域选择 华东或是 华北,请先记得上传到华东1区的域名为up.qiniu.com.up-z0.qiniu.com和upload.qiniu.

初试“七牛云”--零基础运用七牛云配合UEditor实现图片的上传和浏览(.NET篇)

(注册和建立存储空间就不介绍了,网上一把一把的资料,自己试着点点也能明白) 作为一个成熟的菜鸟,如果遇到一个新问题,第一步当然是先百度一下... 看了N个关于七牛云的使用的帖子,表示还是蒙圈的,看懂了一部分,但是不系统,理解的不连贯,作为一个凡是要弄个特别明白的死脑筋,于是开始从头看是研究文档....(以下都是来自http://developer.qiniu.com/article/index.html#quickstart,经过个人精简,如有不明,详情请参阅文档) 先弄明白原理,才能更好的看懂

【开源】1句代码搞定图片批量上传,无需什么代码功底【无语言界限】

开源地址:https://github.com/dunitian/LoTUploader WebUploader基础上的封装改善,一句代码全部实现(样式美化,实例JS优化(配置优化,样式调整,名称+大小显示,错误处理等),后端代码.....) 效果:(完整demo:https://github.com/dunitian/LoTUploader/tree/V1.0/Demo) 一句代码:$.lotuploader('lot-uploader', '/Home/Upload'); //必填参数:ID