CKEditor與CKFinder學習--CKFinder原始碼修改自定義上傳檔名
CKFinder的系列文章到目前應該說基本可以滿足開發需求了,不過還有一個小細節,CKFinder預設上傳的檔名和原始檔名一致,如果檔名重複會自動新增編號“(1)”“(2)”等。
如果需要自定義上傳的檔名怎麼辦呢?
先看效果
採用uuid來命名
時間戳作為字首
下面給出兩種方案來實現ckfinder自定義檔名的方法,第一種只是思路,重點是第二種方法。我們通過修改ckfinder的原始碼來實現ckfinder上傳檔名的自定義
方法一 自己捕獲圖片按鈕提供上傳
可以捕獲圖片按鈕的點選事件
像捕獲其他按鈕的事件一樣。
關於事件的捕獲參考
這個方法不是本文的重點,本文的重點是第二中方法。
方法二 修改CKFinder的原始碼
本文介紹這種方法,如何修改CKFinder的原始碼來自定義上傳檔案的檔名。
本文講介紹如何載入ckfinder的原始碼,然後修改上傳檔案重新命名的程式碼,最後將修改後的程式碼打包成jar包。
下載原始碼
去ckfinder的官網下載,我下載的是Java版本
目前的最新版下載地址
其中的_source就是原始碼,將其解壓。
我們發現其原始碼是一個Maven工程。
ok,首先確保電腦上成功安裝了Maven。Eclipse裡也成功配置了Maven。
載入原始碼
開啟Eclipse
File -> Import 選擇Existing Maven Projects,然後Next
瀏覽剛才解壓的位置,然後Finish
稍等片刻,Eclipse會載入
如果現在報錯,先不用管等構建完成,構建的時候有些錯誤會消失。
修改原始碼
我們需要修改的程式碼在CKFinder下
我們需要修改com.ckfinder.connector.handlers.command下的FileUploadCommand.java
通過註釋我們發現有一個欄位叫newFilename就是它了
定位到validateUploadItem方法
private boolean validateUploadItem(final FileItem item, final String path) {
if (item.getName() != null && item.getName().length() > 0) {
this.fileName = getFileItemName(item);
} else {
this.errorCode = Constants.Errors.CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID;
return false;
}
// 就是這一行程式碼來重新命名的
this.newFileName = this.fileName;
// 下面的程式碼省略了,因為也不會動它們
}
我將上傳的檔名採用uuid進行重新命名。
也可以在檔名前面加上時間戳,這個根據自己的需求來定。
程式碼如下
// 檔案字尾名
String extentsion = FileUtils.getFileExtension(this.fileName);
String uuid = UUID.randomUUID().toString();
// 去掉“-”符號
String id = uuid.substring(0,8)+uuid.substring(9,13)+uuid.substring(14,18)+uuid.substring(19,23)+uuid.substring(24);
this.newFileName = id+"."+extentsion;
// this.newFileName = this.fileName;
如果像以時間戳作為字首可以這麼改
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String prefix = sdf.format(new Date());
this.newFileName = prefix+"-"+this.fileName;
好了,程式碼修改完畢。
打包原始碼
Run AS Maven build( 注意是下面的 )
在Goals 中輸入package,然後點選Run
看到如下資訊說明打包成功。
進入原始碼的資料夾,我們發現在CKFinder目錄下多了一個target目錄
target目中中的CKFinder-2.6.0.jar就是我們打包後生成的jar
至此jar包已經生成,最後一步就是替換以前的jar。為了有所區別,我將生成的CKFinder-2.6.0.jar重新命名為CKFinder-uuid-2.6.0.jar
部署測試
將專案中引用的CKFinder-2.6.0.jar替換為自己修改過的CKFinder-uuid-2.6.0.jar
執行並測試
我們發現上傳了一個ubuntu-alt.png的檔案,在伺服器被重新命名為0ed3be8dc1a14bec9b6326edd3fde511.png
CKFinder-uuid-2.6.0.jar的下載地址