今天终于把这个东东搞定了(主要是上传本地图片的问题,由于kindEditor本身只有PHP版本的,对于我这种java程序员看起来有点像天书)!附件有代码提供下载(内附使用说明书)
我在网上找了一个JSP版本的 网址如下:http://wallimn.iteye.com/blog/327800(他测试的版本是2.4的,现在已经是3.3.1了。所以有点小问题,我稍微修改了一下)
官方网站是:http://www.kindsoft.net/(到官方网站学学,蛮不错的)
1.到官方网站下载kindEditor 网址如下:http://www.kindsoft.net/down.php 。
2. 在Eclipse下建立一个Web项目,将下载下来的文件拷贝到 WebContent目录下。
3. 在WebContent目录下建立一个HTML测试文件:kindEditorTest.html ,代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" charset="utf-8" src="kindEditor/kindeditor-3.3.1/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'content_1' //TEXTAREA输入框的ID }); </script> <title>Insert title here</title> </head> <body> <form action="KindEditorAction.do" method="post"> <textarea id="content_1" name="content" cols="100" rows="8"></textarea> <input type="submit" value="submit"> </form> </body> </html>
说明:1.这里引入了一个外部JS文件,这就是kindEditor。注意路径,你的可能与我的不同!
2.js代码里面有一句KE.show();KE是kindEditor里面的东西,里面的id指定哪个textarea标签来接收可视化编辑框的内容!下面有一个id为content_1的textarea标签
3.form标签是我自己加的,为了测试后台能不能够得到数据,可以先去掉。
4. 这个时候你请求这个页面的时候应该可以看到那个可视化编辑框了,现在唯一的问题就是还不能够上传本地图片,你可以试试!
5. 查看kindEditor文件夹的plugins文件夹里面有一个image.html,打开这个文件。找到action="./../php/upload.php",看到了没有,就是这个东东,kindEditor默认实现的是PHP版本的本地图片上传,把upload.php修改成upload.jsp。并不是这样就完了,没这么简单,呵呵...
6. 找到PHP文件夹,在下面建立一个upload.jsp文件,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import = "java.net.URLDecoder" %>
<%@ page import = "java.util.*" %>
<%@ page import = "org.apache.commons.fileupload.*" %>
<%
String contextPath = request.getContextPath() ;
String SavePath = request.getSession().getServletContext().getRealPath("/")+"image\\";
String SaveUrl = contextPath+ "/image/" ;
System.out.println("c--->"+contextPath+"----->"+SavePath+"---->"+SaveUrl);
String[] ExtArr = new String[]{ ".gif" , ".jpg" , ".png" , ".bmp" };
int MaxSize = 4000000 ;
String Msg1 = "上传文件大小超过限制。" ;
String Msg2 = "上传文件的扩展名不被允许。" ;
String Msg3 = "文件上传失败。" ;
String Msg=Msg3;
//java.io.File files=new java.io.File(".");
//String FileName = (String)request.getAttribute("fileName");
String FileWidth = null ;
String FileHeight = null ;
String FileBorder = null ;
String FileTitle = null ;
String FileTitle2 = null ;
String FileAlign = null ;
String FileHspace = null ;
String FileVspace = null ;
Date dt = new Date();
Random random = new Random();
random.nextInt();
String FileNameAuto = String.format( "%X_%X" , new Object[]{ new Integer(( int )(dt.getTime())), new Integer(random.nextInt())});
System.out.println(FileNameAuto);
String FilePath = null ;
String FileUrl = null ;
DiskFileUpload fu = new DiskFileUpload();
fu.setSizeMax(MaxSize); //
fu.setSizeThreshold( 4096 );
fu.setRepositoryPath( "c:/" );
//ServletRequestContext src = new ServletRequestContext(request);
List fileItems = fu.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
String fieldName = item.getFieldName();
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if ((name== null ||name.equals( "" )) && size== 0 )
continue ;
if (size>MaxSize) {
Msg=Msg1;
break ;
}
//namename = name.replace(':','_');
//namename = name.replace('\\','_');
int pos = name.lastIndexOf( "." );
String ext = name.substring(pos);
boolean b= false ;
for ( int m= 0 ;m<ExtArr.length; m++){
if (ExtArr[m].equalsIgnoreCase(ext)){
b= true ;
break ;
}
}
if (b== false ){
Msg=Msg2;
break ;
}
FilePath = SavePath + FileNameAuto+ext;
System.out.println(FilePath+" "+SavePath+" "+FileNameAuto+" "+ext);
FileUrl = SaveUrl + FileNameAuto+ext;
java.io.File f= new java.io.File(FilePath);
item.write(f);
}
else {
String fieldValue = item.getString();
if ( "imgWidth" .equals(fieldName)){
FileWidth = fieldValue;
}
else if ( "imgHeight" .equals(fieldName)){
FileHeight = fieldValue;
}
else if ( "imgBorder" .equals(fieldName)){
FileBorder = fieldValue;
}
else if ( "imgTitle" .equals(fieldName)){
FileTitle = fieldValue;
}
else if ( "imgTitle2" .equals(fieldName)){
//FileTitle2 = URLDecoder.decode(fieldValue,"GB18030");
FileTitle2 = URLDecoder.decode(fieldValue, "UTF-8" );
}
else if ( "imgAlign" .equals(fieldName)){
FileAlign = fieldValue;
}
else if ( "imgHspace" .equals(fieldName)){
FileHspace = fieldValue;
}
else if ( "imgVspace" .equals(fieldName)){
FileVspace = fieldValue;
}
}
}
if (FileUrl!= null ){
out.println( "<html>" );
out.println( "<head>" );
out.println( "<title>error</title>" );
out.println( "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">" );
out.println( "</head>" );
out.println( "<body>" );
out.println("<script type=\"text/javascript\">parent.KE.plugin[\"image\"].insert(\"content_1\",\""+FileUrl+"\",\""+FileTitle+"\",\""+FileWidth+"\",\""+FileHeight+"\",\""+FileBorder+"\");</script>");
System.out.println("<script type=\"text/javascript\">parent.KE.plugin[\"image\"].insert(\"content_1\",\""+FileUrl+"\",\""+FileTitle+"\",\""+FileWidth+"\",\""+FileHeight+"\",\""+FileBorder+"\");</script>");
out.println( "</body>" );
out.println( "</html>" );
}
else {
out.println( "<html>" );
out.println( "<head>" );
out.println( "<title>error</title>" );
out.println( "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">" );
out.println( "</head>" );
out.println( "<body>" );
out.println( "<script type=\"text/javascript\">alert(\"" + Msg + "\");parent.KindDisableMenu();parent.KindReloadIframe();</script>" );
out.println( "</body>" );
out.println( "</html>" );
}
%>
7. 跑一下试试,这个时候你的后台应该会报错,没有找到一些包。这是因为你缺少一些上传文件的外部jar文件,他们是:commons-fileupload-1.2.1.jar与commons-io-1.4.jar ,附件有下载(里面有详细的说明)
8. 这个时候应该没有什么问题了
9. 在这个过程中,我遇到了一个路径问题。大家看一看,假设你在WebContent下面建立了一个image文件夹,你点击上传文件的时候,文件并没有保存在这个文件夹里面。你可以打印一下那个上传文件保存路径,我这里是一串这样奇怪的东西:E:\Eclipse项目\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ShoppingNetwork\image\。如果你把项目当做war文件导出去,单独在tomcat中部署,那样是保存在WebContent下面的image文件夹里面。我自作聪明地把那个保存路径改为:E:\Eclipse项目\ShoppingNetwork\WebContent\image,结果是我能够看到上传的图片,但是在那个编辑器里面不显示,这个问题折磨了我好久。现在我终于明白了,Eclipse在把项目部署到tomcat的时候就临时把项目拷贝到那个奇怪的目录下面,你可以去那个奇怪的目录下面去找找,应该能够找到你上次的文件!
就这样了,希望大家都能够弄明白!