fckeditor - 文件上傳(4)

fckeditor默認不支持文件上傳,需要下載web服務器端程序(fckeditor.java),並進行配置

1.在web.xml中加入ConnectorServlet的配置信息


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


2.在classpath路徑上創建fckeditor.properties(在src文件夾下創建)

connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl


亂碼問題



由於fckeditor未考慮中文亂碼問題,所以需要對ConnectorServlet做修改



解決fckeditor創建文件夾中文亂碼問題

在ConnectorServlet的doGet方法中找到String newFolderStr = UtilsFile.sanitizeFolderName(newFolderName);這行代碼,在其上添加如下2行代碼。

//NewFolderName爲新創建的文件夾名稱,先用iso-8859-1編碼將字符串還原成字節數組,在用utf-8重新編碼
String newFolderName = request.getParameter("NewFolderName");
newFolderName = new String(newFolderName.getBytes("iso-8859-1"), "utf-8");

String newFolderStr = UtilsFile.sanitizeFolderName(newFolderName);
解決上傳文件名爲中文文件時出現亂碼
fckeditor在java平臺採用的是commons-upload組件進行文件上傳,只要修改ServletFileUpload的headerEncoding屬性爲utf-8就能解決上傳文件名是中文時所出現的亂碼問題。在ConnectorServlet的doPost方法中找到ServletFileUpload upload = new ServletFileUpload(factory);在其後加入下面代碼



FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);

//解決上傳文件名爲中文名時出現亂碼
upload.setHeaderEncoding("utf-8");




中文圖片不能引用
修改server.xml 端口爲8080的Connector,添加屬性URIEncoding="UTF-8"

<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />


解決上傳文件名重名問題

上傳文件名用uuid隨機生成的32位字符串代替,防止文件名重複

String filename = FilenameUtils.getName(rawName);
String baseName = FilenameUtils.removeExtension(filename);
String extension = FilenameUtils.getExtension(filename);

//上傳文件名用uuid隨機生成的32位字符串代替,防止文件名重複
filename=UUID.randomUUID().toString().replace("-", "")+"."+extension;

控制允許上傳文件的文件類型
fckeditor把上傳的文件分爲四種:file,Image,Flash,Media
fckeditor會對上傳文件的類型進行兩次驗證(前臺javascript驗證和後臺java驗證)所以需要對myconfig.js和fckeditor.propertise進行配置
例如:限制上傳圖片格式爲gif和png
在myconfig.js增加下面配置(可參看fckconfig.js的具體配置選項)

FCKConfig.ImageUploadAllowedExtensions = ".(gif|png)$" ;


在fckeditor.propertise進行配置(可參看)

connector.resourceType.image.extensions.allowed=gif|png

控制允許上傳文件的文件大小

1.在服務端的servlet中,在保存文件之前先判斷一下文件大小,如果超出限制,就傳遞一個自定義的錯誤碼,並且不再保存文件,在ConnectorServlet的doPost方法中找到if (!ExtensionsHandler.isAllowed(resourceType, extension))
在後面添加else if語句塊

//如果文件的擴展名不允許上傳
if (!ExtensionsHandler.isAllowed(resourceType, extension))
ur = new UploadResponse(UploadResponse.SC_INVALID_EXTENSION);
//如果文件大小超出限制10k
else if(uplFile.getSize()>10*1024){
//傳遞一個自定義的錯誤碼
ur = new UploadResponse(204);
}
//如果不存在以上錯誤,則保存文件
else {
...

}


2.修改對應的頁面中的回調函數,增加對這個自定義的錯誤碼的處理
找到fckeditor/editor/filemanager/browser/default/frmupload.html和fckeditor/editor/dialog/fck_image/fck_image.js中的OnUploadCompleted方法,
在switch 語句塊中添加如下代碼

case 204 :
alert( '文件太大' ) ;
break ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章