1. 程式人生 > >CKEditor與CKFinder學習--CKFinder原始碼修改自定義上傳檔名

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的下載地址

參考文獻