【推薦套件】 CKFinder 替代方案 Filemanager

CKEditor 很好用,也免費(若需付費快跟我說),但,針對要插入圖檔的動作,需要購買CKFinder,或是其他實做方式。

一個站台沒看錯的話,售價99美金。

最近老闆看到一套GitHub開源的替代方案Filemanager

一進去馬上看Demo

原本只是先把專案給Star下來,沒想到語未畢,馬上有專案有此需求。

Filemanager 的作者是PHP開發為主,所以,有些功能是PHP才有提供。

我馬上寫了一個.net MVC的範例

20150319更新:目前版本已經實做Server端檢查是否僅允許圖檔&實際檔案大小功能。

建議大家Config設定、說明等直接看GitHub的ReadMe,因為未來更新會以GitHub為主。

先說明我覺得是未加強版的原因:

  • 檔案實際上傳,若前台只允許上傳圖檔,後台程式目前並未實際判斷。後台目前只判斷是否在所有允許的附檔名 (20150319更新 ,我的版本已實做) 。
  • 檔案實際上傳,檔案Size大小檢查僅限於前台 (20150319更新 ,我的版本已實做)。
  • 官方PHP有提供縮圖的動作,但,Mvc還沒有。

當從官方下載.zip檔案回來後,解壓縮後,放置scripts資料夾中。

資料夾結構如下:

  • connectors 官方提供多種程式語言實做的程式碼,此專案使用底下的mvc資料夾
    • FilemanagerAreaRegistration.cs   註冊MVC路由用,範例改成:"FileManager/connectors/mvc/filemanager"
    • FilemanagerController.cs               檔案相關程式碼控制(讀資料夾、上傳檔案、等等...)
  • languages 官方提供的語系檔
  • scripts/filemanager.config.js.default   官方提供的設定檔,需自行複製一份存放在同一目錄底下。檔名需為:filemanager.config.js
  • config參數說明
    • culture :語系設定台灣("culture": "zh-tw")
    • lang:Server端的程式語言。.net mvc ("lang": "mvc")
    • quickSelect:是否可以快速選取(預設:false),目前測試若有資料夾開啟時資料夾無法進入下一層
    • dateFormat:檔案資訊時間顯示格式採用PHP格式。("dateFormat": "Y m d H:i")
    • fileRoot:上傳檔案的根目錄路徑。需與Server端的一致,否則會掛在下面這段中。範例使用"fileRoot": "/Upload/"
    •         /// <summary>
              /// Is the file in the root path? Don't allow uploads outside the root path. 
              /// </summary>
              /// <param name="path"></param>
              /// <returns></returns>
              private bool IsInRootPath(string path)
              {
                  return path != null && Path.GetFullPath(path).StartsWith(Path.GetFullPath(RootPath));
              }

       

    • capabilities:圖檔允許的操作行為["select", "download", "rename", "delete", "replace"] 對應 ["選取", "下載", "更名", "刪除", "重新上傳"]
    • fileConnector:自訂的程式路由。官網預設的mvc方式會無法Work,因為官方最後為.mvc的Router,解法。範例使用:"/Filemanager/connectors/mvc/filemanager"
    • upload :底下有幾個設定
      • multiple:是否允許一次上傳多個檔案
      • number:一次上傳多個檔案的個數
      • imagesOnly:是否只允許上傳圖檔(需注意,Server端上傳時未實做)
      • fileSizeLimit:上傳圖檔的限制大小(需注意,Server端上傳時未實做)

前端Config設定完,再修改:

  • FilemanagerController.cs
    • 增加Web.Config中的AppSetting =>Filemanager_RootPath 需與fileRoot相同
    • 增加Web.Config中的AppSetting =>Filemanager_IconDirectory icon的檔案路徑

最後,Global.asax 需檢查是否有註冊Area。

未來,期望先把這個版本強化。

另外,可能要也開發儲存在雲端的方案,例如Azure Blob。

 

功能畫面三連發: