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

利用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实现异步上传图片

时间: 2024-08-03 07:11:47

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

asp.net mvc &#160;Ajax.BeginForm 异步上传图片的问题

当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或 Request.Files[0] 都不会取到文件流. 这就是我要说的,当使用Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步上传是不可行的,因为文件流不会被C#代码读取,但是并不影响 Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步提交表单的特性. 那我我们应该如何异步提交表单呢? 利用 $("#form

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

利用html5调用本地摄像头拍照上传图片 html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件(ActiveX,但是这种只有IE支持)或者是flash来获取(或许你没学过flash那就很坑爹了),在之后微软的silvertlight中也可以获取,但这些都比较麻烦,在html5的世界里,要获取本地摄像头,只要配合js就可以轻松获取.. 目前支持html5

Jquery实现异步上传图片

利用jQuery的ajax函数就可以实现异步上传图片了.一开始我是想在处理程序中,直接用context.Request.Files来获取页面中的input file,但是不知道为什么一次获取不了.网上说的,Form中要设置enctype="multipart/form-data"和 method="post",input file中要加runat="server",但都加了依然获取不到.哪位大侠知道的,求指教啊. 既然后台获取不到Input fi

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

通过表单Form提交来上传文件的方式这里就不说了: 下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可: 涉及思路: //发送2次Ajax请求完成js异步上传文件的操作:          //第1次,post 只上传文件,返回文件名name          //第2次,get 根据文件名name定位服务器上的文件,同时根据浏览器传过来的realname重命名服务器上的文件          //(如果有其他参数,也可以通过第2次一并上传) 图片文件

迭代器、生成器以及利用生成器实现单线程的异步并发

1.迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合

ajax异步上传图片&amp;SpringMVC后台代码

function uploadPic(){ var options = { url : "/upload/updatePic.action", type : "post", dataType : "json", success : function(data){ $("#allUrl").attr("src", data.url); $("#imgUrl").val(data.url);

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

php结合jquery异步上传图片(ajaxSubmit),以下为提交页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he

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

利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复 打印过程可能很长,这时候有可能需要暂停下来做一些事情,然后回来继续接着打印 打印过程中有2个线程:一个是程序运行的主线程,一个是异步调用的打印线程,需要实现的是在主线程中的控件(暂停打印按纽)来控制打印线程   的暂停和恢复. ManualResetEvent就像一个信号灯,当有信号的时候(初始化为true或者有线程调用它的set()方法)就表示所有在等待(WaitOne())的线程,你们可以 继续运行了,当没有信号的

搭建一个Tomcat,作为图片服务器,异步上传图片

1.图片服务器Tomcat的设置  tomcat/conf/web.xml中内容更改,将tomcat设置为可以读写 <servlet>     <servlet-name>default</servlet-name>             <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>         <init-param>