使用過FCKeditor的朋友肯定都知道,F(xiàn)CKeditor的文件上傳的文件都是保存在自定義的目錄下,而且保存的目錄僅僅按照文件類型進(jìn)行了劃分,只有4個:file、flash、image和media(FCKeditor有內(nèi)置的管理器可以自由建立文件夾,但是由于并不安全所以這塊被我關(guān)閉掉了,用戶所要做的事情就是上傳),而實(shí)際的應(yīng)用過程中我們不可能將這些同類型的文件放在一個文件夾下,我們需要有特殊的邏輯來存放,比如:新聞相關(guān)文件是按照月份來存放、博客資源是按照博主的用戶名來存放等等,這時FCKeditor的基本上就滿足不了我這個需求了,所以就需要研究FCKeditor的源碼進(jìn)行簡單修改來達(dá)到我們的目的。
FCKeditor主要由2部分組成,一部分就是FCKeditor的HTML包,包含了JS、HTML頁面主要負(fù)責(zé)與客戶端的交互,而另一部分就是具體的C#程序集FredCK.FCKeditorV2。
其中FCKeditor的上傳部分主要也分2個部分:
1、面向客戶端UserControl——config.ascx(存放于fckeditor\editor\filemanager\connectors\aspx\下)
2、服務(wù)器端負(fù)責(zé)上傳的具體類:FredCK.FCKeditorV2.FileBrowser.Config.cs
一、.NET 配置
web.config
WebSite:虛擬目錄名
在VS里是對的,但放到IIS中就不行了,因?yàn)镮IS的虛擬目錄不是WebSite了,所以要保證虛擬目錄名不是固定死的,要適應(yīng)隨時變化。
IIS里配置:啟用父路徑
二、路徑設(shè)置
1.相對應(yīng)用路徑
在屬性文件fckeditor.properties中添加如下值
connector.userFilesPath=/app/11_fmss/jyjj/user_temp_files
connector.userFilesAbsolutePath=/app/11_fmss/jyjj/user_temp_files
這個樣文件就會傳到指定的這個路徑下,相應(yīng)的image、file系統(tǒng)自動添加。
知道看net.fckeditor.handlers.PropertiesLoader類就明白什么意思了。
2.肯能變化的相對路徑
配置文件的寫法
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
connector.userPathBuilderImpl = cn.cpees.k_fmss.jyjj.service.FckeditorUserPath
這里不用指定路徑,指定我們要定義的生產(chǎn)路徑的類即可。
FckeditorUserPath類的寫法
public class FckeditorUserPath implements UserPathBuilder{
public String getUserFilesAbsolutePath(HttPServletRequest request) {
return "/app/11_fmss/jyjj/user_temp_files/"+request.getSession(false).getAttribute("username")+"/"+DateUtil.currentDate();
}
public String getUserFilesPath(HttpServletRequest request) {
return "/app/11_fmss/jyjj/user_temp_files/"+request.getSession(false).getAttribute("username")+"/"+DateUtil.currentDate();
}
}
這個類是生產(chǎn)路徑的類。
3.絕對路徑。
默認(rèn)情況下FCKeditor改變上傳文件的路徑只能在應(yīng)用下面,而不能寫絕對路徑,如果設(shè)置絕對路徑需要擴(kuò)展FCKeditor,擴(kuò)展的方法是首先改配置文件fckeditor.properties的改法
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
connector.impl = net.fckeditor.connector.impl.LocalConnector //擴(kuò)展connector,不能用默認(rèn)的connector實(shí)現(xiàn)
connector.userPathBuilderImpl = cn.cpees.k_fmss.jyjj.fckeditor.FilePathBuilder//自定義userPathBuilderImpl 的擴(kuò)展類
這個類要求實(shí)現(xiàn)UserPathBuilder接口以及他的方法
FilePathBuilder類的寫法
import javax.servlet.http.HttpServletRequest;
import net.fckeditor.requestcycle.UserPathBuilder;
import cn.common.component.PathPool;
import cn.common.component.logger.LOG;
import cn.common.component.logger.LogFactory;
public class FilePathBuilder implements UserPathBuilder{
LOG log = LogFactory.getLogger(FilePathBuilder.class);
public String getUserFilesAbsolutePath(HttpServletRequest request) {
// return PathPool.getDownloadFilePath();
return "d:/file";
}
public String getUserFilesPath(HttpServletRequest tequest) {
//return PathPool.getDownloadFilePath();
return "d:/file";
}
}