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