利用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. Independence独立

    Independence refers to the degree to which each test case stands alone. That is, does the success or ...

  2. kali linux 一些工具及命令集1(搜集DNS信息)

    DNS信息收集 1.dnsdict6   用于查看ipv6的dns信息,国内很少ipv6,基本无用 2.dnsmap 收集dns信息,同类别还有dnsenum,dnswalk 使用dnsmap需先找到 ...

  3. latex公式中的空格如何表示

    两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m的宽度 大空格 a\ b 1/3m宽度 中等空格 a\;b 2/7m宽度 小空格 a\,b 1/6m宽度 ...

  4. 解决android.os.NetworkOnMainThreadException

    好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThreadExc ...

  5. 数据结构(12) -- 图的邻接矩阵的DFS和BFS

    //////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...

  6. 本地虚拟机挂载windows共享目录搭建开发环境

    关闭防火墙(本地环境 直接关掉即可)service iptables stop检查是否安装了需要的samba软件包rpm –q samba如果没安装yum install samba system-c ...

  7. Uva 11183 - Teen Girl Squad (最小树形图)

    Problem ITeen Girl Squad Input: Standard Input Output: Standard Output You are part of a group of n  ...

  8. js运动 九宫格展开

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

  9. Cocos2d-x项目移植到WinRT/Win8小记

    Cocos2d-x项目移植到WinRT/Win8小记 作者: K.C. 日期: 11/17/2013 Date: 2013-11-17 23:33 Title: Cocos2d-x项目移植到WinRT ...

  10. xml velocity模板

    . <?xml version="1.0" encoding="GBK"?> <PACKET type="REQUEST" ...