这个问题我很是郁闷,很早以前就想着需要改fckeditor的上传文件的配置,终于这个项目还是要这么做,搜了N遍的GOOGLE和百度也没有看到网上有合适的解决办法,后来因为 01404421 大师的指点(在此对他表示感谢,虽不知道男女,姑且用他来称呼吧,呵呵),我对部分做了修改,也给予网上N多需要这方面资料的人一点方法。
不废话了,直接主题吧。
fckeditor.properties配置文件
tomcat还需要在server.xml中配置虚拟目录
创建实现类net.fckeditor.requestcycle.impl.MyContextPathBuilder
其实一般情况下读者不需要重写这个类,只要
connector.userPathBuilderImpl=net.fckeditor.requestcycle.impl.ServerRootPathBuilder
一样可以配置绝对路径,也不需要修改任何的源代码,但是我的项目有特殊的要求,相信绝大多数人一样,类似博客,一个用户只能访问属于自己的空间,这里,必须将该用户的浏览上传权限指定下来。所以对MyContextPathBuilder类为
这样在D盘的temp文件下面产生了已该用户的ID命名的文件夹。那么所属该用户上传浏览只能在这个文件夹中进行,浏览图片的域名只需要http://localhost:8181/temp/XX.jpg
以上处理只是自己在这个项目中遇见的问题,特殊情况可以由读者自己去实现,当然,放在绝对路径中的好处有很多,最起码TOMCAT重启后不影响文件丢失,我在项目中还写了一个servlet的图片访问。
因为发布系统以外还有另外一个项目需要访问D盘的图片,对于该问题有很多资料解决,我个人还是比较喜欢用<img src="aa.servlet?tag=ss">的方式来找绝对路径的。
不废话了,直接主题吧。
fckeditor.properties配置文件
#上传文件的绝对路径
connector.userFilesAbsolutePath = D:/temp
#在web上使用文件时的虚拟目录
connector.userFilesPath = http://localhost:8181/temp
connector.userPathBuilderImpl=net.fckeditor.requestcycle.impl.MyContextPathBuilder
connector.impl=net.fckeditor.connector.impl.LocalConnector
connector.userActionImpl=net.fckeditor.requestcycle.impl.MyEnabledUserAction
tomcat还需要在server.xml中配置虚拟目录
<Context path="/temp" docBase="D:\temp" reloadable="true"/>
创建实现类net.fckeditor.requestcycle.impl.MyContextPathBuilder
其实一般情况下读者不需要重写这个类,只要
connector.userPathBuilderImpl=net.fckeditor.requestcycle.impl.ServerRootPathBuilder
一样可以配置绝对路径,也不需要修改任何的源代码,但是我的项目有特殊的要求,相信绝大多数人一样,类似博客,一个用户只能访问属于自己的空间,这里,必须将该用户的浏览上传权限指定下来。所以对MyContextPathBuilder类为
package net.fckeditor.requestcycle.impl;
import javax.servlet.http.HttpServletRequest;
import com.news.base.SysContants;
import com.news.base.TokenBean;
import net.fckeditor.handlers.PropertiesLoader;
import net.fckeditor.requestcycle.impl.ContextPathBuilder;
/**
* 给不同的用户看到属于他自己的上传空间
*/
public class MyContextPathBuilder extends ContextPathBuilder {
@Override
public String getUserFilesPath(HttpServletRequest request) {
// TODO Auto-generated method stub
//在此可以根据从session中读取的用户名或者ID来对应其可以操作的目录
TokenBean tokenBean = (TokenBean) request.getSession().getAttribute(SysContants.SESSION_TOKEN);
int userId = Integer.parseInt(tokenBean.getUserId()+"");
return PropertiesLoader.getUserFilesPath()+"/"+userId;
}
@Override
public String getUserFilesAbsolutePath(HttpServletRequest request) {
// TODO Auto-generated method stub
TokenBean tokenBean = (TokenBean) request.getSession().getAttribute(SysContants.SESSION_TOKEN);
int userId = Integer.parseInt(tokenBean.getUserId()+"");
return PropertiesLoader.getUserFilesAbsolutePath()+"/"+userId;
}
}
这样在D盘的temp文件下面产生了已该用户的ID命名的文件夹。那么所属该用户上传浏览只能在这个文件夹中进行,浏览图片的域名只需要http://localhost:8181/temp/XX.jpg
以上处理只是自己在这个项目中遇见的问题,特殊情况可以由读者自己去实现,当然,放在绝对路径中的好处有很多,最起码TOMCAT重启后不影响文件丢失,我在项目中还写了一个servlet的图片访问。
因为发布系统以外还有另外一个项目需要访问D盘的图片,对于该问题有很多资料解决,我个人还是比较喜欢用<img src="aa.servlet?tag=ss">的方式来找绝对路径的。