利用KindEditor的uploadbutton实现异步上传图片

异步上传图片最经常使用的方法就是图片在iframe中上传。这样仅仅须要刷新iframe。而不用刷新整个页面。

    KindEditor文本编辑器框架中uploadbutton能够帮助我们实现,不再须要我们自己去写iframe的实现。使用起来非常方便。

html部分:

.....

<input class="" type="text" name="beautyTown.img_0" id="img_url_0" value="" readonly="readonly" />


                    <input type="button" id="uploadButton_0" value="改动图片1" />

.....

js部分:

.....

KindEditor.ready(function(K) {

    $("input[id^='uploadButton_']").each(function(i,v){

        var obj = this;

        var index=i;

        var uploadbutton = K.uploadbutton({

            button : obj,

            fieldName : 'imgFile',

            url : 'upload_json.jsp',

            afterUpload : function(data) {

                if (data.error === 0) {

                    var url = K.formatUrl(data.url, 'absolute');

                    K('#img_url_'+index).val(url);

                } else {

                    alert(data.message);

                }

            },

            afterError : function(str) {

                alert('自己定义错误信息: ' + str);

            }

        });

        uploadbutton.fileBox.change(function(e) {

            uploadbutton.submit();

        });

    });

});

.....

js代码中用了模糊筛选器,能够绑定多个button 。

'upload_json.jsp'是处理上传图片的action,代码例如以下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>   

<%@ page import="java.util.*,java.io.*" %>   

<%@ page import="java.text.SimpleDateFormat" %>   

<%@ page import="org.apache.commons.fileupload.*" %>   

<%@ page import="org.apache.commons.fileupload.disk.*" %>   

<%@ page import="org.apache.commons.fileupload.servlet.*" %>   

<%@ page import="org.json.simple.*" %>   

<%@ page import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper" %>   

    

<%   

//文件保存文件夹路径       

//存放在\kindeditor\attached下  

String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/cms/";   

//文件保存文件夹URL /kindeditor/attached/  

String saveUrl = request.getContextPath() + "/upload/cms/";   

//定义同意上传的文件扩展名   

//定义同意上传的文件扩展名   

HashMap<String, String> extMap = new HashMap<String, String>();   

extMap.put("image", "gif,jpg,jpeg,png,bmp");   

extMap.put("flash", "swf,flv");   

extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");   

extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");   

    

//同意最大上传文件大小 struts.xml struts.multipart.maxSize=3G   

long maxSize = 3000000000l;   

    

response.setContentType("text/html; charset=UTF-8");   

    

if(!ServletFileUpload.isMultipartContent(request)){   

    out.println(getError("请选择文件。

"));   

    return;   

}   

//检查文件夹   

File uploadDir = new File(savePath);   

if(!uploadDir.isDirectory()){   

    out.println(getError("上传文件夹不存在。"));   

    return;   

}   

//检查文件夹写权限   

if(!uploadDir.canWrite()){   

    out.println(getError("上传文件夹没有写权限。"));   

    return;   

}   

    

String dirName = request.getParameter("dir");//image   

if (dirName == null) {   

    dirName = "image";   

}   

if(!extMap.containsKey(dirName)){   

    out.println(getError("文件夹名不对。

"));   

    return;   

}   

//创建目录   

savePath += dirName + "/";   

saveUrl += dirName + "/";  

File saveDirFile = new File(savePath);   

if (!saveDirFile.exists()) {   

    saveDirFile.mkdirs();   

}   

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");   

String ymd = sdf.format(new Date());   

savePath += ymd + "/";  

saveUrl += ymd + "/";  

File dirFile = new File(savePath);   

if (!dirFile.exists()) {   

    dirFile.mkdirs();   

}   

if (!dirFile.isDirectory()) {   

    out.println(getError("上传文件夹不存在 。

"));   

    return;   

}   

//检查文件夹写入权限   

if (!dirFile.canWrite()) {   

    out.println(getError("上传文件夹没有写入权限。"));   

    return;   

}   

    

 

MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;   

//获得上传的文件名称   

String fileName = wrapper.getFileNames("imgFile")[0];//imgFile,imgFile,imgFile   

//获得文件过滤器   

File file = wrapper.getFiles("imgFile")[0];   

    

//检查扩展名   

String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();   

if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){   

    out.println(getError("上传文件扩展名是不同意的扩展名。\n仅仅同意" + extMap.get(dirName) + "格式。"));   

    return;   

}   

//检查文件大小   

if (file.length() > maxSize) {   

        out.println(getError("上传文件大小超过限制。"));   

        return;   

}    

    

    

//重构上传图片的名称    

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");   

String newImgName = df.format(new Date()) + "_"  

                + new Random().nextInt(1000) + "." + fileExt;   

byte[] buffer = new byte[1024];   

//获取文件输出流   

FileOutputStream fos = new FileOutputStream(savePath +"/" + newImgName);   

//获取内存中当前文件输入流   

InputStream in = new FileInputStream(file);   

try {   

        int num = 0;   

        while ((num = in.read(buffer)) > 0) {   

                fos.write(buffer, 0, num);   

        }   

} catch (Exception e) {   

        e.printStackTrace(System.err);   

} finally {   

        in.close();   

        fos.close();   

}   

//发送给 KE    

JSONObject obj = new JSONObject();   

obj.put("error", 0);   

obj.put("url", saveUrl +"/" + newImgName);   

///zswz/attached/image/20111129/  image 20111129195421_593.jpg   

out.println(obj.toJSONString());   

%>   

<%!   

private String getError(String message) {   

    JSONObject obj = new JSONObject();   

    obj.put("error", 1);   

    obj.put("message", message);   

    return obj.toJSONString();   

}   

%>

后台使用的jar包有:

commons-fileupload-1.2.2.jar

json_simple-1.1.jar

struts2-core-2.1.8.1.jar

等。

利用KindEditor的uploadbutton实现异步上传图片的更多相关文章

  1. Jquery实现异步上传图片

    利用jQuery的ajax函数就可以实现异步上传图片了.一开始我是想在处理程序中,直接用context.Request.Files来获取页面中的input file,但是不知道为什么一次获取不了.网上 ...

  2. asp.net MVC  Ajax.BeginForm 异步上传图片的问题

    当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或 Request.Files[0] 都不会取到文件流. 这就是我要说的,当使用Ajax.Be ...

  3. 利用html5调用本地摄像头拍照上传图片[转]

    利用html5调用本地摄像头拍照上传图片   html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头, ...

  4. nodejs利用ajax实现网页无刷新上传图片

    nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...

  5. 利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)

    利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复 打印过程可能很长,这时候有可能需要暂停下来做一些事情,然后回来继续接着打印 打印过程中有2个线程:一个是程序运行的主线程, ...

  6. 异步上传图片,光用jquery不行,得用jquery.form.js插件

    异步上传图片,光用jquery不行,得用jquery.form.js插件,百度一下下载这个插件,加jquery,引入就可以了 <form id="postbackground" ...

  7. [Ajax] 使用Ajax异步上传图片文件(非Form表单提交)

    通过表单Form提交来上传文件的方式这里就不说了: 下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可: 涉及思路: //发送2次Ajax请求完成js异步上 ...

  8. php结合jquery异步上传图片(ajaxSubmit)

    php结合jquery异步上传图片(ajaxSubmit),以下为提交页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi ...

  9. 利用Crowbar抓取网页异步加载的内容 [Python俱乐部]

    利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 在做 Web 信息提取.数据挖掘的过程中,一个关键步骤就是网页源代码的获取.但是出于各种原因 ...

随机推荐

  1. Spring配置数据库固定代码

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" > &l ...

  2. java 多线程同步

    一.synchronized关键字 同步方法 每个对象都包含一把锁(也叫做监视器),它自动称为对象的一部分(不必为此写任何特殊的代码).调用任何synchronized方法时,对象就会被锁定,不可再调 ...

  3. java 获取当前时间及年月日时分秒

    java代码如下: package test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...

  4. 实现3D摄像机缓冲系统的一些思考

    最近需要模拟红侠乔伊的镜头运用.这东西初看简单,实际还是很需要功夫的.关键不是程序技术如何(就一个摄像机),而是分析其轨迹和追踪点规律.其实就是一个3D空间中的缓冲系统.你如何确定都有什么参数,这么多 ...

  5. word添加页码

    问:在Word里面,分两栏插入页码,怎么使两栏都有页码? 可以通过插入域来实现分两栏后两栏都有页码.左边一栏页码为 当前页页码×2-1 :右边一栏页码为 当前页页码×2.在页眉页脚视图中,分别在左右两 ...

  6. JAVA分析html算法(JAVA网页蜘蛛算法)

    近来有些朋友在做蜘蛛算法,或者在网页上面做深度的数据挖掘.但是遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费 ...

  7. LeetCode(5) - Longest Palindromic Substring

    这道题要求的是给你一个string, 如“adcdabcdcba",要求返回长度最大的回文子字符串.这里有两个条件,一是子字符串,而是回文.用纯暴力搜索的话,需要用到O(n^3)的时间,必然 ...

  8. Problem About Salesforce SOAP API 32.0 In .Net Project

    最近在集成项目项目中遇到一个问题:在用最新版本(API 32.0)Enterprise WSDL在.Net 中做集成时,初始化SforceService 时会初始化类错误.这算是Salesforce ...

  9. x-debug配置简述 - chunyu

    一 x-debug 是什么?在配置之前,先解决一个问题,x-debug 是什么?我也不查标准答案了,就说说个人理解.x-debug是一个PHP调试工具,帮助开发者在IDE里面进行代码的断点调试,效果如 ...

  10. dom 留言加强

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...