`
hot66hot
  • 浏览: 457256 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于kindeditor3.4的上传功能的JAVA实现

阅读更多
最近公司要换图文混排 ,发现kindEditor非常不错,下载http://www.kindsoft.net/下来用了用,发现上传功能只有php的,郁闷。。。
没办法自己写一个。。。
引用
upload.jsp

<%@ 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

<%@ 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>");
%>


这回好了,问题解决了,大家多多提意见,那个后台图片管理用不到,就没写
  • src.rar (2.4 KB)
  • 下载次数: 419
分享到:
评论
9 楼 Dreams_One 2015-05-15  
上传音频的时候getFiles("imgFile");为空 ,大神这是为什么呀
8 楼 hot66hot 2011-01-26  
gua_ma 写道
lz啊..我的问题跟楼上一样,,也是服务器出现故障了的说

错误代码如下:
2011-1-5 16:25:15 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
at org.apache.jsp.editor.plugins.image.struts2Upload_jsp._jspService(struts2Upload_jsp.java:61)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
如果你用的是Struts2使用struts2Upload.jsp
若果你没用Struts2使用upload.jsp
7 楼 gua_ma 2011-01-05  
lz啊..我的问题跟楼上一样,,也是服务器出现故障了的说

错误代码如下:
2011-1-5 16:25:15 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
at org.apache.jsp.editor.plugins.image.struts2Upload_jsp._jspService(struts2Upload_jsp.java:61)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
6 楼 hot66hot 2010-12-02  
cecil2007 写道
楼主,用你的struts2Upload.jsp上传本地图片时,还是提示“服务器发生故障”~~请问能否解释一下~~
如果把
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

里的/*改成其他的,又会抛出异常~~


在我这里没有问题 ,把你的异常信息发一下.
你给我web.xml内容没有用 . 不过你可以尝试使用火狐的filebug去分析一下   看看你的请求数据是什么。
也可以在struts2Upload.jsp里写日志 查看每行运行结果。
5 楼 cecil2007 2010-11-30  
楼主,用你的struts2Upload.jsp上传本地图片时,还是提示“服务器发生故障”~~请问能否解释一下~~
如果把
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

里的/*改成其他的,又会抛出异常~~
4 楼 cnwong 2010-10-21  
very very good!LZ解决了
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
items为空的问题。敬礼!
3 楼 ztianlong 2010-05-03  
嗯  呵呵
2 楼 hot66hot 2010-04-19  
ztianlong 写道
out.println("parent.parent.KE.plugin['image'].insert('" 

怎么是两个 parent 啊
应该是一个吧 我试了

谢谢分享~! jsp版 和struts2 中都用到你的东西了 嘿嘿

kindeditor3.4是两个parent。
kindeditor3.3是一个parent。
根据它的PHP_DEMO实现的.
呵呵,对你有用就好。
1 楼 ztianlong 2010-04-15  
out.println("parent.parent.KE.plugin['image'].insert('" 

怎么是两个 parent 啊
应该是一个吧 我试了

谢谢分享~! jsp版 和struts2 中都用到你的东西了 嘿嘿

相关推荐

    kindeditor上传视频、图片功能实现

    在“kindeditor上传视频、图片功能实现”中,我们将探讨如何利用KindEditor与Java后端配合,实现在网页上进行图片和视频的上传功能。 1. **KindEditor的图片上传功能**: KindEditor内建了图片上传的功能,用户...

    KindEditor-4.1.9批量上传图片完整示例(可以上传到image目录下的子目录中,可返回上一级目录,并实现了按名称、大小、类型排序的功能)

    这是本人写的一个基于KindEditor-4.1.9的Java项目,采用Struts2框架,实现了KindEditor单张图片上传、批量图片上传,可以上传到image目录下的子目录中,可返回上一级目录,并实现了按名称、大小、类型排序的功能。...

    kindeditor-3.4.2.zip

    KindEditor 是一款开源的网页文本编辑器,广泛应用于网站内容管理、博客写作和其他需要富文本编辑功能的场景。版本3.4.2是其在某个时间点的稳定版本,提供了丰富的功能和良好的用户体验。 KindEditor 的核心特性...

    kindeditor-3.4.4 HTML可视化编辑器

    KindEditor使用JavaScript编写,可以无缝的与Java、.NET、PHP、ASP等程序接合。 KindEditor非常适合在CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用,2006年7月首次发布2.0以来,KindEditor依靠出色的...

    java平台下kindeditor的文件上传

    Java平台下的KindEditor文件上传功能主要涉及到Web应用中的文件上传技术,这在现代网页开发中是常见的需求。KindEditor是一款开源的JavaScript富文本编辑器,它提供了丰富的API和配置选项,使得用户可以在网页上实现...

    基于kindeditor编辑器的上传文件类

    1. **KindEditor上传机制** KindEditor的上传功能是通过JavaScript与服务器端的交互实现的。当用户在编辑器中选择文件上传时,编辑器会触发一个异步请求,将文件信息发送到服务器。这个过程中,服务器端需要有一个...

    kindeditor 上传图片java

    在Java环境中集成KindEditor,主要是为了实现用户在编辑器中上传图片的功能。这个功能对于网站内容创建、博客写作或者论坛发帖等场景非常实用。下面我们将深入探讨如何在Java后端处理KindEditor的图片上传请求以及...

    Kindeditor-3.5-project java

    Kindeditor-3.5 是一个基于Java开发的开源富文本编辑器项目,它为Web应用提供了功能丰富的文本编辑解决方案。这个项目的实用性与简洁性是其主要特点,使得开发者能够快速集成到自己的应用中,为用户提供类似桌面应用...

    java集成富文本编辑器KindEditor

    KindEditor是一款开源的JavaScript富文本编辑器,适用于Java环境下的Web应用,能够帮助开发者实现图文混排、图片上传、链接插入等功能,提升用户体验,简化后台处理工作。 集成KindEditor到Java项目中,首先要理解...

    JAVA中使用kindeditor实现在线编辑文档

    在Java开发中,实现在线编辑文档的功能是一项常见需求,例如在论坛、博客或者知识分享平台。KindEditor是一款流行的开源富文本编辑器,它提供了一种简单而强大的方式来实现这样的功能。本文将深入探讨如何在Java环境...

    jsp版的kindeditor附件上传组件

    jsp版KindEditor附件上传组件不仅为用户提供了便捷的文件上传和插入功能,也展示了Java技术在Web开发领域的强大应用能力。通过深入理解其工作原理和技术实现,开发者可以更好地利用KindEditor提升网站或应用的编辑...

    富文本编辑kindeditor使用 java 实现 spring mvc

    KindEditor是一款开源的、基于JavaScript的富文本编辑器,提供了一套完整的文本编辑功能,包括字体样式、颜色调整、图片上传、链接添加等,使得用户可以在网页上像使用Word一样编辑文本。 在Java Spring MVC框架中...

    kindeditor图片上传携带token字段

    通过以上步骤,你已经成功地在KindEditor中实现了图片上传携带token字段的功能。这个过程不仅增加了安全性,也展示了如何利用KindEditor的自定义功能扩展其默认行为,以适应特定的项目需求。记住,安全始终是Web开发...

    kindeditor图片上传 struts2实现

    在本文中,我们将详细探讨如何将KindEditor与Struts2整合,实现图片上传功能,并使用Bootstrap来优化页面展示。 首先,我们需要下载KindEditor的中文版本,如提供的`kindeditor-4.1.10-zh-CN.zip`文件。解压后,...

    kindeditor添加本地上传flash功能

    4. **插件**:`plugins`目录下的文件可能是实现Flash上传功能的具体插件代码,这些插件扩展了KindEditor的核心功能,提供了与Flash相关的操作界面和逻辑。 5. **皮肤和样式**:`skins`目录中的文件则负责编辑器的...

    kindeditor编辑器,可上传多图片,文件上传等功能

    总的来说,KindEditor是一个强大而灵活的富文本编辑器,尤其适合那些需要集成图片和文件上传功能的ASP.NET Web应用。其易用性和丰富的功能使其成为许多开发者的首选。如果你在使用过程中遇到任何问题,社区和作者...

    vue3下可引用的编辑器,基于kindeditor4.1.11改造,可ajax上传,带进度条

    Vue3 下可引用的编辑器是针对现代前端框架优化的文本编辑工具,它基于 KindEditor 4.1.11 版本进行改造,...如果你的项目基于 Vue3,并且需要一个功能完善的编辑器,这个改造版的 KindEditor 将是一个值得考虑的选择。

    kindeditor富文本,多图上传,去除flash插件,解决无法展示选择图片按钮问题,以及添加上传后结果展示

    本主题主要探讨如何在KindEditor中实现多图上传功能,并解决因移除Flash导致的选择图片按钮无法展示的问题,同时添加上传后的图片结果展示。 一、多图上传功能 多图上传是现代富文本编辑器必备的功能之一,它允许...

    Java web富文本编辑器(kindeditor).docx

    Java Web 富文本编辑器(KindEditor)是基于 Java Web 开发的富文本编辑器解决方案,旨在解决开发过程中的编辑功能、图片文件等操作。通过使用 KindEditor,可以快速实现富文本编辑器的功能,并提供了多种插件支持,...

Global site tag (gtag.js) - Google Analytics