kindeditor 修改jsp中的图片上传功能

最近公司要换图文混排 ,发现kindEditor非常不错,下载http://www.kindsoft.net/下来用了用,发现上传功能只有php的,郁闷。。。
没办法自己写一个。。。
一提JAVA上传肯定要用commons-fileupload-*.jar和commons-io-*.jar
没办法人家是主流 其他的上传组件都得靠边
看了一下kindEditor的PHP实现(虽说不懂PHP),挺简单,按照它的那个写
不说废话,上代码。。。

引用
upload.jsp

 

Java代码
  1. <%@ page pageEncoding="gbk"%>   
  2. <%@page  
  3.     import="java.util.*,java.io.*,   
  4.     org.apache.commons.fileupload.FileItem,   
  5.     org.apache.commons.fileupload.FileUploadException,   
  6.     org.apache.commons.fileupload.disk.DiskFileItemFactory,   
  7.     org.apache.commons.fileupload.servlet.ServletFileUpload,   
  8.     java.util.concurrent.locks.*"%>   
  9. <%   
  10.     String id = "";   
  11.     String url = "";   
  12.     String imgTitle = "";   
  13.     String imgWidth = "";   
  14.     String imgHeight = "";   
  15.     String imgBorder = "";   
  16.     String filePath = "";   
  17.     String align = "";   
  18.     // **************************************   
  19.     // 初始化上传工厂对象   
  20.     DiskFileItemFactory factory = new DiskFileItemFactory();   
  21.     // 设置上传工厂对象限制   
  22.     factory.setSizeThreshold(1024 * 1024 * 20);   
  23.     factory.setRepository(new File(request.getSession(true)   
  24.             .getServletContext().getRealPath("/")));   
  25.     // 创建上传对象   
  26.     ServletFileUpload upload = new ServletFileUpload(factory);   
  27.     upload.setFileSizeMax(1024 * 1024 * 20);   
  28.     List<FileItem> items = null;   
  29.     try {   
  30.         items = upload.parseRequest(request);   
  31.     } catch (FileUploadException e) {   
  32.         e.printStackTrace(System.out);   
  33.     }   
  34.     for (Iterator<FileItem> i = items.iterator(); i.hasNext();) {   
  35.         FileItem item = i.next();   
  36.         if (item.isFormField()) {   
  37.             String name = item.getFieldName();   
  38.             String value = item.getString("gbk");   
  39.             if (name.equals("id")) {   
  40.                 id = value;   
  41.             } else if (name.equals("imgTitle")) {   
  42.                 imgTitle = value;   
  43.             } else if (name.equals("imgWidth")) {   
  44.                 imgWidth = value;   
  45.             } else if (name.equals("imgHeight")) {   
  46.                 imgHeight = value;   
  47.             } else if (name.equals("imgBorder")) {   
  48.                 imgBorder = value;   
  49.             } else if (name.equals("align")) {   
  50.                 align = value;   
  51.             } else if (name.equals("url")) {   
  52.                 filePath = value;   
  53.             }   
  54.         } else {   
  55.             // 取得表单域名   
  56.             String fieldName = item.getFieldName();   
  57.             // 取得文件名   
  58.             String fileName = item.getName();   
  59.             // 取得文件类型   
  60.             String contentType = item.getContentType();   
  61.                
  62.             final Lock lock = new ReentrantLock();   
  63.             String newName = null;   
  64.             lock.lock();   
  65.             try {   
  66.                 //加锁为防止同一时间文件名冲突    
  67.                 newName = System.currentTimeMillis()   
  68.                         + fileName.substring(fileName.lastIndexOf("."),   
  69.                                 fileName.length());   
  70.             } catch (Exception e) {   
  71.                 e.printStackTrace(System.err);   
  72.             } finally {   
  73.                 lock.unlock();   
  74.             }   
  75.             filePath = "./ke_upload/" + newName;   
  76.             FileOutputStream fos = new FileOutputStream(request   
  77.                     .getSession().getServletContext().getRealPath("/")   
  78.                     + "ke_upload//" + newName);   
  79.             if (item.isInMemory()) {   
  80.                 fos.write(item.get());   
  81.                 fos.close();   
  82.             } else {   
  83.                 InputStream in = item.getInputStream();   
  84.                 byte[] buffer = new byte[1024];   
  85.                 int len;   
  86.                 while ((len = in.read(buffer)) > 0) {   
  87.                     fos.write(buffer, 0, len);   
  88.                 }   
  89.                 in.close();   
  90.                 fos.close();   
  91.             }   
  92.         }   
  93.     }   
  94.     out.println("<html><head><title>Insert Image</title><meta http-equiv='content-type' content='text/html; charset=gbk'/></head><body>");   
  95.     out.println("<script type='text/javascript'>");   
  96.     out.println("parent.parent.KE.plugin['image'].insert('" + id   
  97.             + "','" + filePath + "','" + imgTitle + "','" + imgWidth   
  98.             + "','" + imgHeight + "','" + imgBorder + "','" + align   
  99.             + "');</script>");   
  100.     out.println("</body></html>");   
  101. %>  
<%@ page pageEncoding="gbk"%>
<%@page
	import="java.util.*,java.io.*,
	org.apache.commons.fileupload.FileItem,
	org.apache.commons.fileupload.FileUploadException,
	org.apache.commons.fileupload.disk.DiskFileItemFactory,
	org.apache.commons.fileupload.servlet.ServletFileUpload,
	java.util.concurrent.locks.*"%>
<%
	String id = "";
	String url = "";
	String imgTitle = "";
	String imgWidth = "";
	String imgHeight = "";
	String imgBorder = "";
	String filePath = "";
	String align = "";
	// **************************************
	// 初始化上传工厂对象
	DiskFileItemFactory factory = new DiskFileItemFactory();
	// 设置上传工厂对象限制
	factory.setSizeThreshold(1024 * 1024 * 20);
	factory.setRepository(new File(request.getSession(true)
			.getServletContext().getRealPath("/")));
	// 创建上传对象
	ServletFileUpload upload = new ServletFileUpload(factory);
	upload.setFileSizeMax(1024 * 1024 * 20);
	List<FileItem> items = null;
	try {
		items = upload.parseRequest(request);
	} catch (FileUploadException e) {
		e.printStackTrace(System.out);
	}
	for (Iterator<FileItem> i = items.iterator(); i.hasNext();) {
		FileItem item = i.next();
		if (item.isFormField()) {
			String name = item.getFieldName();
			String value = item.getString("gbk");
			if (name.equals("id")) {
				id = value;
			} else if (name.equals("imgTitle")) {
				imgTitle = value;
			} else if (name.equals("imgWidth")) {
				imgWidth = value;
			} else if (name.equals("imgHeight")) {
				imgHeight = value;
			} else if (name.equals("imgBorder")) {
				imgBorder = value;
			} else if (name.equals("align")) {
				align = value;
			} else if (name.equals("url")) {
				filePath = value;
			}
		} else {
			// 取得表单域名
			String fieldName = item.getFieldName();
			// 取得文件名
			String fileName = item.getName();
			// 取得文件类型
			String contentType = item.getContentType();
			
			final Lock lock = new ReentrantLock();
			String newName = null;
			lock.lock();
			try {
				//加锁为防止同一时间文件名冲突 
				newName = System.currentTimeMillis()
						+ fileName.substring(fileName.lastIndexOf("."),
								fileName.length());
			} catch (Exception e) {
				e.printStackTrace(System.err);
			} finally {
				lock.unlock();
			}
			filePath = "./ke_upload/" + newName;
			FileOutputStream fos = new FileOutputStream(request
					.getSession().getServletContext().getRealPath("/")
					+ "ke_upload//" + newName);
			if (item.isInMemory()) {
				fos.write(item.get());
				fos.close();
			} else {
				InputStream in = item.getInputStream();
				byte[] buffer = new byte[1024];
				int len;
				while ((len = in.read(buffer)) > 0) {
					fos.write(buffer, 0, len);
				}
				in.close();
				fos.close();
			}
		}
	}
	out.println("<html><head><title>Insert Image</title><meta http-equiv='content-type' content='text/html; charset=gbk'/></head><body>");
	out.println("<script type='text/javascript'>");
	out.println("parent.parent.KE.plugin['image'].insert('" + id
			+ "','" + filePath + "','" + imgTitle + "','" + imgWidth
			+ "','" + imgHeight + "','" + imgBorder + "','" + align
			+ "');</script>");
	out.println("</body></html>");
%>



代码完了,发在跟他的PHP文件一个目录就可以了
再把image.html文件的action一改,OK !
拿到Struts2应用中, 问题又来了。。。
没办法一句一句的debug!
问题找到了,原来S2为简化上传功能,把所有的enctype="multipart/form-data"表单做了wrapper最后把HttpServletResquest封装成
org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
怪不得我的
ServletFileUpload.parseRequest(request)不行!!!
还我原来的request !!!
不过查看它的API 原来人家已经为咱做好了  呵呵,比原来的方便许多。
继续代码:

引用
struts2Upload.jsp

 

Java代码
  1. <%@ page language="java" pageEncoding="GBK"%>   
  2. <%@page  
  3.     import="java.util.*,java.io.*,   
  4.     org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper,   
  5.     java.util.concurrent.locks.*"%>   
  6. <%   
  7.     //Struts2  请求 包装过滤器   
  8.     MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;   
  9.     // 获得上传的文件名    
  10.     String fileName = wrapper.getFileNames("imgFile")[0];   
  11.     //获得未见过滤器    
  12.     File file = wrapper.getFiles("imgFile")[0];   
  13.     //----------- 重新构建上传文件名----------------------   
  14.     final Lock lock = new ReentrantLock();   
  15.     String newName = null;   
  16.     lock.lock();   
  17.     try {   
  18.         //加锁为防止文件名重复    
  19.         newName = System.currentTimeMillis()   
  20.                 + fileName.substring(fileName.lastIndexOf("."),   
  21.                         fileName.length());   
  22.     }finally {   
  23.         lock.unlock();   
  24.     }   
  25.     //------------ 锁结束 -------------   
  26.     //获取文件输出流    
  27.     FileOutputStream fos = new FileOutputStream(request.getSession()   
  28.             .getServletContext().getRealPath("/")   
  29.             + "ke_upload//" + newName);   
  30.     //设置 KE 中的图片文件地址    
  31.     String newFileName = request.getScheme() + "://"  
  32.             + request.getServerName() + ":" + request.getServerPort()   
  33.             + request.getContextPath() + "/ke_upload/" + newName;   
  34.     byte[] buffer = new byte[1024];   
  35.     //获取内存中当前文件输入流    
  36.     InputStream in = new FileInputStream(file);   
  37.     try {   
  38.         int num = 0;   
  39.         while ((num = in.read(buffer)) > 0) {   
  40.             fos.write(buffer, 0, num);   
  41.         }   
  42.     } catch (Exception e) {   
  43.         e.printStackTrace(System.err);   
  44.     } finally {   
  45.         in.close();   
  46.         fos.close();   
  47.     }   
  48.     //发送给KE    
  49.     out.println("<html><head><title>Insert Image</title><meta http-equiv='content-type' content='text/html; charset=gbk'/></head><body>");   
  50.     out.println("<script type='text/javascript'>");   
  51.     out.println("parent.parent.KE.plugin['image'].insert('"  
  52.             + wrapper.getParameter("id") + "','" + newFileName + "','"  
  53.             + wrapper.getParameter("imgTitle") + "','"  
  54.             + wrapper.getParameter("imgWidth") + "','"  
  55.             + wrapper.getParameter("imgHeight") + "','"  
  56.             + wrapper.getParameter("imgBorder") + "','"  
  57.             + wrapper.getParameter("align") + "');</script>");   
  58.     out.println("</body></html>");   
  59. %>  
<%@ page language="java" pageEncoding="GBK"%>
<%@page
	import="java.util.*,java.io.*,
	org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper,
	java.util.concurrent.locks.*"%>
<%
	//Struts2  请求 包装过滤器
	MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
	// 获得上传的文件名 
	String fileName = wrapper.getFileNames("imgFile")[0];
	//获得未见过滤器 
	File file = wrapper.getFiles("imgFile")[0];
	//----------- 重新构建上传文件名----------------------
	final Lock lock = new ReentrantLock();
	String newName = null;
	lock.lock();
	try {
		//加锁为防止文件名重复 
		newName = System.currentTimeMillis()
				+ fileName.substring(fileName.lastIndexOf("."),
						fileName.length());
	}finally {
		lock.unlock();
	}
	//------------ 锁结束 -------------
	//获取文件输出流 
	FileOutputStream fos = new FileOutputStream(request.getSession()
			.getServletContext().getRealPath("/")
			+ "ke_upload//" + newName);
	//设置 KE 中的图片文件地址 
	String newFileName = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ request.getContextPath() + "/ke_upload/" + newName;
	byte[] buffer = new byte[1024];
	//获取内存中当前文件输入流 
	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 
	out.println("<html><head><title>Insert Image</title><meta http-equiv='content-type' content='text/html; charset=gbk'/></head><body>");
	out.println("<script type='text/javascript'>");
	out.println("parent.parent.KE.plugin['image'].insert('"
			+ wrapper.getParameter("id") + "','" + newFileName + "','"
			+ wrapper.getParameter("imgTitle") + "','"
			+ wrapper.getParameter("imgWidth") + "','"
			+ wrapper.getParameter("imgHeight") + "','"
			+ wrapper.getParameter("imgBorder") + "','"
			+ wrapper.getParameter("align") + "');</script>");
	out.println("</body></html>");
%>



这回好了,问题解决了,大家多多提意见,那个后台图片管理用不到,就没写(估计写也写不出来,偶是PHP盲。。。)

覆盖jsp中的upload_json.jsp代码,就行了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值