一、创建默认上传目录:webRoot下创建userfiles。在其内部分别创建image、flash、file、media四个文件夹,存放什么大家应该很清楚!
二、添加fckeditor.properties文件,添加:connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
三、下载:FCKeditor_2.6.4.zip、fckeditor-java-2.4.1-bin.zip、slf4j-1.5.2.zip。
分别解压后得到我们需要的5个包:commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,fckeditor-java-core- 2.4.1.jar, slf4j-api-1.5.6.jar,slf4j-jdk14-1.5.6.jar。
将五个包放到项目的lib目录下!
要注意的是:slf4j-api-1.5.6.jar和slf4j-jdk14-1.5.6.jar版本尽量一直,不然会报错!
四、将FCKeditor_2.6.4.zip打开,解压出fckeditor,把整个文件放到项目的webRoot目录下!
五、打开项目fckeditor文件,找到editor-->filemanager-->connectors-->php-->config.php文件,到 $Config['Enabled']= false ;将false改为true!意思是开启上传功能!
六、在web.xml内添加如下代码:
<servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>
net.fckeditor.connector.ConnectorServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Connector</servlet-name>
<url-pattern>
/fckeditor/editor/filemanager/connectors/*
</url-pattern>
</servlet-mapping>
七、许多人用FCKeditor,没用struts2的时候上传可以成功,但是一用上struts2就上传失败,提示的是没有权限!是因为web.xml配置了
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
导致struts2把FCKeditor的请求过滤了!
解决办法:
自己写一个过滤器继承struts2的StrutsPrepareAndExecuteFilter
过滤器如下:
package com.envch.filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
public class MyStrutsPrepareAndExecuteFilter extends
StrutsPrepareAndExecuteFilter {
@Override
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)throws IOException,ServletException{
HttpServletRequest request = (HttpServletRequest)req;
if("/Media/fckeditor/editor/filemanager/connectors/php/upload.php".equals(request.getRequestURI())){
chain.doFilter(req,res);
}else{
//System.out.println(request.getRequestURI() + "-------------------");
super.doFilter(req,res,chain);
}
}
}
其中Media为项目名!
修改web.xml为:
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.envch.filter.MyStrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
八、中文乱码和上传名修改!
1、下载fckeditor-java-2.4.1-src.zip源文件。
2、在你的工程目录下新建net.fckeditor.connector包,复制fckeditor-java-2.4.1----->java-core----->src----->main----->java----->net----->fckeditor----->connector----->ConnectorServlet.java文件到该包下
3、编辑该文件,在文件中找到如下代码:
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
紧随其后加上:
/*解决上传中文乱码*/
upload.setHeaderEncoding("UTF-8");
找到:
String filename = FilenameUtils.getName(rawName);
紧随其后加上:
/*修改上传文件名*/
String suffix = filename.substring(filename.lastIndexOf("."));
Calendar cad = Calendar.getInstance();
filename = String.valueOf(cad.get(Calendar.YEAR))+String.valueOf(cad.get(Calendar.MONTH))+String.valueOf(cad.get(Calendar.DAY_OF_MONTH))+String.valueOf(cad.get(Calendar.HOUR_OF_DAY))+String.valueOf(cad.get(Calendar.MINUTE))+String.valueOf(cad.get(Calendar.SECOND));
filename = filename + suffix;
/*修改上传文件名结束*/
OK!编译项目,找到编译后的ConnectorServlet.class文件,将其压缩到fckeditor-java-core-2.4.1.jar中将原来的文件替换掉!
一切就绪!去体验成功后的喜悦吧!