周志成,柳綱,楊宇峰,龔廣京
(1.南瑞集團(國網(wǎng)電力科學研究院)有限公司,江蘇 南京 210006;2.國電南瑞科技股份有限公司,江蘇 南京 210006)
隨著計算機的普及和信息化技術(shù)的發(fā)展,紙質(zhì)文檔資料已經(jīng)基本被電子化替代。隨著企業(yè)規(guī)模擴大和正規(guī)化發(fā)展,企業(yè)內(nèi)部文檔內(nèi)容日益豐富、數(shù)量日益增多,但依然存在如下問題:首先,數(shù)量巨大的各類文檔分布在各個計算機中,眾多文件無法在企業(yè)內(nèi)部共享[1];其次,在眾多文件中檢索特定文件費時費力;另外文件線下拷貝分發(fā)極其不便[1,2]。由于實現(xiàn)文件的在線管理迫在眉睫,而商用網(wǎng)絡硬盤等文件管理系統(tǒng)又涉及安全問題,企業(yè)文檔尤其是涉密資料不適合在這些系統(tǒng)上存儲,因此該項研究基于企業(yè)內(nèi)部網(wǎng)絡部署設計了一個安全在線文檔管理系統(tǒng)并進行了軟件實現(xiàn)。該系統(tǒng)基于B/S(瀏覽器/服務器)模式,采用Spring MVC分層架構(gòu),實現(xiàn)了目錄及文件的上傳、下載、復制、移動、刪除、重命名以及文件夾整體上傳和下載功能,并支持word、PPT、excel、PDF以及TXT等常見類型文檔的在線預覽功能。此外,該系統(tǒng)還支持按照條件或全文檢索文件。
該系統(tǒng)設計的目的是為了解決企業(yè)內(nèi)部文檔的安全、便捷存儲問題,因此系統(tǒng)應該滿足安全性、高效性、可擴展性和簡單易用的要求[3,4]。對各項要求分別闡述如下:
安全性:首先,該系統(tǒng)部署于企業(yè)內(nèi)部局域網(wǎng)中,可有效避免來自互聯(lián)網(wǎng)的網(wǎng)絡攻擊行為、降低敏感文檔泄密的幾率;其次,只有登錄認證的用戶才能使用該系統(tǒng),只有經(jīng)過相應授權(quán)的用戶才能進行相應操作,從而保證了系統(tǒng)的安全性。
高效性:對系統(tǒng)業(yè)務流程進行合理設計,對業(yè)務邏輯進行必要優(yōu)化,提高系統(tǒng)的可用性和流暢度。
可擴展性:系統(tǒng)使用B/S架構(gòu),具體分為展示層、業(yè)務層和持久化層。分層設計使得系統(tǒng)功能擴展或升級迭代變得容易。
簡單易用:系統(tǒng)采用B/S架構(gòu),用戶只需使用裝有瀏覽器的計算機就可以使用該系統(tǒng),無需額外安裝軟件,對客戶端機器性能業(yè)務無苛刻要求,方便用戶使用。此外,系統(tǒng)在設計上充分考慮用戶操作習慣,接近商用網(wǎng)盤操作系統(tǒng),努力做到簡單易用。
就其功能而言,系統(tǒng)應滿足文檔管理的基本操作需求,并在此基礎(chǔ)上提供部分高級功能。系統(tǒng)的功能框圖如圖1所示。
圖1 企業(yè)在線文檔管理系統(tǒng)功能框圖
Spring MVC作為一款輕量級的企業(yè)應用開發(fā)框架,已在企業(yè)級應用開發(fā)中得到廣泛應用[5]。Spring MVC框架以MVC作為設計模式,其核心思想是使業(yè)務邏輯、數(shù)據(jù)持久化和前端界面相分離,它可以讓每一功能模塊單獨工作且可以對某一部分作出修改而對其它部分不產(chǎn)生影響,方便應用功能擴展和升級。使用Spring MVC框架可以提高開發(fā)效率,降低系統(tǒng)后期維護和應用迭代升級成本,因此該系統(tǒng)選擇Spring MVC作為系統(tǒng)開發(fā)框架。
該系統(tǒng)選擇開源的Tomcat作為web中間件,Tomcat完全開源,完美支持JSP、Servlet和JDBC等J2EE關(guān)鍵技術(shù),已在大量中小型應用中得到廣泛使用。因為oracle作為大型關(guān)系型數(shù)據(jù)庫的代表,性能優(yōu)勢明細,并且擁有良好的技術(shù)支持,所以選擇oracle作為數(shù)據(jù)庫。此外,本系統(tǒng)中還使用了大量開源技術(shù),將在后續(xù)章節(jié)中詳述。
該系統(tǒng)將文件實體存儲在文件服務器上,而將文件存儲位置等信息存儲在關(guān)系型數(shù)據(jù)庫中,同時對文件操作做日志記錄并持久化于數(shù)據(jù)庫之中。用戶可以根據(jù)需要建立相應的目錄結(jié)構(gòu),進行上傳、刪除、移動文件等操作。為了防止文件服務器同一路徑下同名文件覆蓋,所有的目錄或文件經(jīng)特定算法轉(zhuǎn)義處理后保存在文件服務器上,數(shù)據(jù)中同時保存原始名稱和轉(zhuǎn)義以后的名稱,原始名稱供頁面顯示時使用,轉(zhuǎn)義后的名稱用來尋找文件的真實路徑和名稱。
普通的文件上傳、下載為常見功能,利用常規(guī)的文件流操作即可完成,此處不再贅述。
該系統(tǒng)提供文件夾整體上傳的功能,保存至服務器的文檔和上傳的文檔保持相同的目錄結(jié)構(gòu)。對于目錄層次較多的文檔,該操作對提高操作效率作用明顯。文件夾整體上傳的業(yè)務邏輯如下:
(1)將客戶端需要上傳的文件夾整體(包含其所有子文件夾及其包含的所有文件)保存至文件文件服務器的某個臨時位置;
(2)依次遍歷生成的臨時文件夾,對遍歷過程中的每一項:如果是文件,則將該文件名稱轉(zhuǎn)義后保存至文件服務器指定位置,并同時在數(shù)據(jù)庫中增加相應記錄;如果是文件夾,則在指定位置建立相應文件夾并同時在數(shù)據(jù)庫中增加相應記錄,此外還要遞歸調(diào)用方法,直至臨時目錄下所有文件或文件夾處理完成;
(3)刪除臨時文件夾及其包含的子文件夾和包含的所有文件;
(4)前端頁面顯示上傳成功的提示信息。
如果需要同時下載多個文件,單個文件逐一下載的方式會造成使用不便,因此該系統(tǒng)設計實現(xiàn)了多文件或文件夾整體打包下載功能。只需同時勾選多個文件或文件夾,點擊下載按鈕,系統(tǒng)便會將選中的文件或文件夾打包并以壓縮包的形式下載至客戶端機器,所有文件會保持服務器上原有的目錄層次。多文件打包下載的業(yè)務邏輯如圖2所示。
圖2 多文件下載業(yè)務流程
文件檢索即根據(jù)一個或多個關(guān)鍵字快速定位到用戶需要的特定文件。該系統(tǒng)中的目錄可以根據(jù)用戶需要而自由建立,文件名稱也可以修改,因此可以使用文件路徑的各級目錄及文件名中的特征詞作為關(guān)鍵字,從而檢索到用戶需要的文件。用戶輸入的特征詞可以來自文件路徑中一個目錄或多個目錄、文件名,或者是兩者的組合,輸入的特征詞越多,檢索的文件越精確。此外,當用戶輸入多個目錄中的特征詞時,不能限制用戶一定按照目錄層次由上到下的順序輸入。因此,如何根據(jù)用戶輸入條件快速定位到特定的文件需要精心設計一種算法。該系統(tǒng)中約定,當具有多個檢索條件時,如果特征詞僅來自文件路徑中的目錄或者文件名稱,多個條件之間以單個空格間隔;如果多個檢索條件為兩者的組合,2類特征詞內(nèi)部以單個空格間隔,2類條件之間以雙空格間隔,并且目錄中的特征詞在前(下文中稱之為第1類特征條件),文件名稱中的特征詞(下文中稱之為第2類特征條件)在后。文件檢索的完整業(yè)務流程圖如圖3所示。
圖3 文件檢索業(yè)務流程
其中,第1類特征條件的檢索算法流程如下:
(1)獲取所有的目錄allDirs,初始化集合dirs作為滿足查詢條件的目錄集合,初始化計數(shù)器startIndex并置為1;
(2)查詢滿足第1個查詢條件的目錄,如果能查詢到結(jié)果,將結(jié)果加入到集合dirs中,執(zhí)行(3);如果沒有查詢到結(jié)果則執(zhí)行(8);
(3)獲取第startIndex+1個關(guān)鍵字keyword,遍歷(2)中獲取到的集合dirs,對其中的每個目錄dir,獲取其所有上級目錄superDirs(包括其上級目錄及其更上層的目錄)和其所有下層目錄subDirs(包含其子目錄以及更下層的目錄);
(4)遍歷superDirs,如果superDirs中某一項包含關(guān)鍵字keyword,則停止遍歷并將dir從dirs中移除;
(5)遍歷subDirs,如果subDirs中某一項包含關(guān)鍵字keyword,則將其加入到dirs中;
(6)計數(shù)器startIndex++;
(7)如果所有檢索關(guān)鍵已處理,執(zhí)行(8);否則執(zhí)行(3);
(8)查詢出集合dirs中所包含的所有文件信息,序列化返回給前臺展示。流程結(jié)束。
文本文件是一種常見的文件類型,該系統(tǒng)設計并實現(xiàn)了文本文件在線預覽方案。該系統(tǒng)將文本文件分為普通文本文件和代碼源碼文件,普通文本文件就是除代碼源碼文件之外的其它文本文件。該系統(tǒng)中的文本文件閱讀器基于CodeMirror開發(fā)。CodeMirror是一款開源的JavaScript插件[6],其功能十分強大并提供了詳細的API,使用方便。該插件能較好地展示文本,并可以按照不同編程語言的語法規(guī)則,高亮顯示代碼源碼。它幾乎支持所有常見的編程語言,只需簡單地將模式設置成對應的編程語言即可。該系統(tǒng)中普通文本文件和代碼源碼文件的在線預覽效果如圖4和圖5所示。
圖4 普通文本文件在線預覽效果
圖5 代碼源碼文件在線預覽效果
PDF文件是另一種常見的文檔格式,本系統(tǒng)支持PDF文件的在線預覽。除IE系瀏覽器外,幾乎所有的現(xiàn)代瀏覽器都支持PDF文件在線預覽功能,但瀏覽器只能默認以新的tab頁方式打開PDF文件,不利于系統(tǒng)集成,用戶體驗不佳。為兼容不同瀏覽器,提升客戶使用體驗,該系統(tǒng)集成PDF.js框架作為PDF文件瀏覽器。PDF.js可以實現(xiàn)在html下直接瀏覽PDF文檔,是一款開源的PDF文檔讀取解析插件[7]。它的功能非常強大,能將PDF文件渲染成Canvas,瀏覽器兼容性較好。需要瀏覽某個文件,只需將文件名稱以特定參數(shù)的形式附著于URL后面即可,使用方便。該系統(tǒng)中PDF文件的在線預覽效果如圖6所示:
圖6 PDF文件在線預覽效果
MS office文檔是日常辦公中使用頻率最高的文檔類型,該系統(tǒng)支持其中word、PPT和excel 3種類型文檔的在線預覽。設計方案是使用aspose工具包在服務器端將他們轉(zhuǎn)換為系統(tǒng)能夠解析的文檔類型。具體來講,將word和PPT類型的文檔轉(zhuǎn)換為PDF文件,將excel文件轉(zhuǎn)換為HTML文件。詳細的處理邏輯如圖7所示。
圖7 MS Office文檔在線預覽處理流程
當客戶端退出文件預覽頁面時,后臺將生成的臨時文件銷毀。需要注意的是:aspose是商用工具包[8,9],使用時需要獲得商用許可。此外,后臺文件轉(zhuǎn)換過程消耗內(nèi)存比較嚴重[10],為防止內(nèi)存溢出,應對虛擬機參數(shù)做優(yōu)化調(diào)整,系統(tǒng)實現(xiàn)時可供參考使用的參數(shù)如下:
-Xms1024M -Xmx1024M
-XX:PermSize=256M - XX:MaxPermSize=256M
為保證信息安全,該系統(tǒng)部署于企業(yè)內(nèi)部局域網(wǎng)。采用3臺服務器,分別為web服務器、文件服務器和數(shù)據(jù)庫服務器,詳細的網(wǎng)絡拓撲結(jié)構(gòu)如圖8所示。
圖8 文檔管理系統(tǒng)網(wǎng)絡拓撲結(jié)構(gòu)
(1)設計了一套企業(yè)在線文檔管理系統(tǒng),對其中關(guān)鍵技術(shù)做了詳細研究并進行了系統(tǒng)編碼實現(xiàn)。
(2)經(jīng)測試,覆蓋需求分析中提出的功能需求,具有穩(wěn)定、簡單易用的特點,可以滿足企業(yè)文檔在線管理的需要。該系統(tǒng)已作為綜合能源管控與服務系統(tǒng)的文件庫管理子模塊在生產(chǎn)中得到使用,且效果良好。