曾新洲
摘要:Openstack Swift是一個(gè)高度可用的、分布式的、最終一致的對(duì)象存儲(chǔ)。組織可以使用Swift高效、安全、廉價(jià)地存儲(chǔ)大量數(shù)據(jù)[1]。高職云計(jì)算技術(shù)與應(yīng)用專業(yè)學(xué)生可利用openstack對(duì)象存儲(chǔ)技術(shù),搭建Swift服務(wù)器,并在該服務(wù)器上開發(fā)Web云盤系統(tǒng),實(shí)現(xiàn)用戶注冊(cè)、登錄,文件上傳、下載、復(fù)制、移動(dòng)、刪除、搜索等功能,極大地方便了高職院校師生遠(yuǎn)程管理個(gè)人數(shù)據(jù),節(jié)約存儲(chǔ)成本。
關(guān)鍵詞:Openstack;Swift;云計(jì)算技術(shù)與應(yīng)用專業(yè);Web云盤
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)20-0265-03
Design and Implementation of Web Cloud Disk for Cloud Computing Technology and Application Based on Openstack
ZENG Xin-zhou
(Changsha Commerce&tourism; College, Changsha 410116, China)
Abstract: Openstack Swift is a highly available, distributed, eventually consistent object/blob store. Organizations can use Swift to store lots of data efficiently, safely, and cheaply. The students of cloud computing technology and application in higher vocational colleges can use openstack object storage technology to build Swift server, and develop Web cloud disk system on the server to realize the functions of user registration, login, file uploading, downloading, copying, moving, deleting, searching and so on, which greatly facilitates the remote management of personal data by teachers and students in higher vocational colleges and saves storage costs.
Key words: Openstack; Swift; Cloud computing technology and Application Major; Web Cloud Disk
隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,全球數(shù)據(jù)量以每2年翻一番的速度快速增長(zhǎng),近2年產(chǎn)生的數(shù)據(jù)量相當(dāng)于人類有史以來(lái)所有數(shù)量的總和,預(yù)計(jì)到2020年,全球數(shù)據(jù)量將達(dá)到35ZB,大容量網(wǎng)絡(luò)存儲(chǔ)已經(jīng)成為網(wǎng)民緊缺的需求。近年來(lái),基于Openstack的云計(jì)算技術(shù)快速發(fā)展,思科、IBM、阿里云、華為等各大廠商紛紛加入Openstack項(xiàng)目,基于Openstack平臺(tái)的阿里云、騰訊云、華為云、百度云紛至沓來(lái),基于云存儲(chǔ)的網(wǎng)盤技術(shù)得到了長(zhǎng)足的應(yīng)用[2]。通過(guò)使用云盤,用戶可以隨時(shí)隨地辦公,并能實(shí)現(xiàn)數(shù)據(jù)的快速備份和恢復(fù),避免可能出現(xiàn)的數(shù)據(jù)風(fēng)險(xiǎn)[3-4], Openstack中有三個(gè)與存儲(chǔ)相關(guān)的組件:swift對(duì)象存儲(chǔ)、glance鏡像存儲(chǔ)和cinder塊存儲(chǔ)[5]。
2015年10月教育部將“云計(jì)算技術(shù)與應(yīng)用”專業(yè)列入高職專業(yè)目錄,高職“云計(jì)算技術(shù)與應(yīng)用”專業(yè)主要培養(yǎng)云計(jì)算系統(tǒng)規(guī)劃、云平臺(tái)搭建、云平臺(tái)部署與運(yùn)維和云計(jì)算應(yīng)用開發(fā)等崗位的高素質(zhì)技術(shù)技能型人才,高職云計(jì)算機(jī)技術(shù)與應(yīng)用專業(yè)學(xué)生利用所學(xué)專業(yè)知識(shí),搭建openstack swift服務(wù)器,并在該服務(wù)器上開發(fā)出基于B/S架構(gòu)的web云盤系統(tǒng),實(shí)現(xiàn)用戶注冊(cè)、登錄、文件上傳/下載、新建文件夾、文件/文件夾的復(fù)制/移動(dòng)/重命名/刪除等功能。高職師生可將個(gè)人數(shù)據(jù)保存在web云盤中,方便師生管理個(gè)人數(shù)據(jù),節(jié)約存儲(chǔ)成本,并可實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程備份和遷移。
1 系統(tǒng)功能設(shè)計(jì)
web云盤具有用戶管理、文件夾管理、文件管理和回收站管理四大功能,其中用戶管理包括用戶注冊(cè)、用戶登錄和修改用戶信息。文件夾管理功能包括新建、復(fù)制、移動(dòng)文件夾等,文件管理功能由文件分類管理、文件上傳、下載、復(fù)制、移動(dòng)、搜索等構(gòu)成,回收站管理包括還原文件/文件夾和清空回收站兩大功能,web云盤系統(tǒng)功能設(shè)計(jì)如圖1所示。
2 數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)
Web云盤系統(tǒng)包含兩類數(shù)據(jù)信息:用戶信息和文件信息,文件保存在swift服務(wù)器內(nèi)以用戶名命名的容器中,無(wú)須創(chuàng)建文件信息表,web云盤系統(tǒng)采用MySQL數(shù)據(jù)庫(kù),使用t_user數(shù)據(jù)表保存用戶信息,如表1所示。
3 功能實(shí)現(xiàn)
3.1 程序架構(gòu)
Web云盤系統(tǒng)采用jsp+hibernate+spring實(shí)現(xiàn),圖2為系統(tǒng)的包結(jié)構(gòu)圖,表2為包對(duì)應(yīng)的功能。
3.2 用戶管理
用戶注冊(cè)成功后,采用MD5算法將用戶密碼加密后保存在數(shù)據(jù)表t_user的password字段中,同時(shí),在swift服務(wù)器中創(chuàng)建兩個(gè)容器:主容器、垃圾箱容器,主容器以“登錄用戶名”命名,垃圾箱容器以“garbage_登錄用戶名”命名,用戶登錄時(shí),輸入的用戶名、密碼提交給后臺(tái)的控制邏輯UserController.java進(jìn)行處理,控制邏輯根據(jù)用戶輸入的用戶名獲得User對(duì)象,如果User對(duì)象為空,表明用戶不存在,彈出“該用戶不存在”對(duì)話框;如果User對(duì)象不為空,則采用MD5算法將用戶輸入的密碼轉(zhuǎn)換成密文,再與User對(duì)象中的密碼進(jìn)行比較,密碼一致,則進(jìn)入主界面,否則,彈出“密碼錯(cuò)誤”對(duì)話框。
3.3 文件夾管理
為了便于存儲(chǔ)和提取web云盤中的文件,需將所有的文件分類保存在文件夾中,實(shí)現(xiàn)文件的分類管理,同時(shí)文件夾管理還包括新建、重命名、復(fù)制、移動(dòng)、刪除文件夾等功能。
3.3.1 新建文件夾
用戶點(diǎn)擊“新建文件夾”按鈕,彈出對(duì)話框提示用戶輸入文件夾名,文件夾名不能包含“/”“.”等特殊字符,且不能為空,用戶輸入的文件夾名以ajax的方式傳遞給后臺(tái)的createdir.action進(jìn)行處理,后臺(tái)頁(yè)面采用spring MVC模式中的請(qǐng)求注解@RequestMapping獲得文件夾名,并調(diào)用SwiftDFS的createDir方法在swift服務(wù)器的用戶主容器中創(chuàng)建該文件夾。
3.3.2 復(fù)制文件夾
在進(jìn)行文件夾復(fù)制操作時(shí),需要將源文件夾下的整個(gè)文件系統(tǒng)復(fù)制到目標(biāo)文件夾,包括源文件夾下的所有文件和文件夾,文件夾的復(fù)制操作采用遞歸方式實(shí)現(xiàn)。文件夾復(fù)制流程如圖3所示。
3.4 文件管理
3.4.1 文件分類管理
Web云盤可根據(jù)文件類型進(jìn)行管理,文件類型包括全部文件、我的文檔、我的圖片、我的視頻、我的音樂(lè)、垃圾箱等。用戶點(diǎn)擊“全部文件”可顯示所有的文件/文件夾信息,在該界面中可進(jìn)行文件/文件夾的所有操作,包括上傳、下載、新建文件夾、復(fù)制、移動(dòng)、刪除、搜索等,用戶登錄成功后,后臺(tái)頁(yè)面將文件/文件夾列表信息返回給前臺(tái)main.jsp頁(yè)面,在main.jsp頁(yè)面中,通過(guò)
3.4.2 文件重命名
用戶選中某個(gè)文件/文件夾時(shí),顯示“刪除”“下載”“重命名”“復(fù)制”“移動(dòng)”按鈕,用戶點(diǎn)擊“重命名”按鈕后,彈出重命名對(duì)話框。在前臺(tái)頁(yè)面main.jsp中需要對(duì)用戶的輸入的新文件名做以下出錯(cuò)處理:
1) 新文件名中不能包含“/”等特殊字符;
2) 新文件名不能為空;
3) 同時(shí)只能對(duì)一個(gè)文件進(jìn)行重命名操作;
4) 新文件類型與老文件類型必須一致。
用戶輸入的信息正確時(shí),將用戶輸入的信息傳遞給后臺(tái)的rename.action進(jìn)行處理,后臺(tái)程序調(diào)用SwiftDFS的renameDir方法或renameFile方法更新swift服務(wù)器中的相應(yīng)文件名。
3.4.3 下載
下載是云盤的一個(gè)重要功能,分為單文件下載和多文件下載,下載單個(gè)文件時(shí),首先將云盤中的文件寫入到字符數(shù)組中,然后再構(gòu)建response響應(yīng)對(duì)象,設(shè)置響應(yīng)的MIME類型和響應(yīng)頭,最后將字符數(shù)組輸出到客戶端瀏覽器界面。主要代碼如下所示:
byte[] b = swiftStorageService.download(userName, filepath);
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(filename.getBytes("UTF-8"),"ISO-8859-1"));
outputStream = new BufferedOutputStream(response.getOutputStream());
outputStream.write(b);
下載多個(gè)文件時(shí),需要將多個(gè)文件放在以第一個(gè)文件命名的文件夾中,并將文件夾進(jìn)行打包處理,最后將打包文件作為響應(yīng)返回給客戶端瀏覽器。
3.5 回收站管理
回收站中用于存放用戶刪除的文件夾和文件,用戶可一次還原多個(gè)文件或文件夾,同時(shí)也可清空回收站中的文件。
3.5.1 還原文件/文件夾
在回收站中,以表格形式呈現(xiàn)已刪除的文件和文件夾,每一個(gè)文件/文件夾占據(jù)表格的一行(在這我們將每一行稱為一條記錄),每條記錄包含以下信息:復(fù)選框、文件名/文件夾名、文件大小、文件修改日期。在恢復(fù)文件/文件夾時(shí),遍歷表格中的所有行,找出選中的行,將選中行的文件名/文件夾名(含路徑,路徑名與文件名之間用大于號(hào)隔開)保存在一個(gè)字符串中,多個(gè)文件名/文件夾名之間用逗號(hào)隔開,并將該字符串傳遞給后臺(tái)頁(yè)面處理,后臺(tái)頁(yè)面分離出需要恢復(fù)的文件/文件夾名,再調(diào)用backGarbageFile方法將文件/文件夾恢復(fù)到用戶容器中,核心代碼如下:
User user = getSessionUser(request);
String userName = user.getUsername();
String[] strs = filePath.split(",");
for(int i=0; i { String[] temp = strs[i].split(">"); swiftStorageService.backGarbageFile(userName, temp[0], temp[1]); } 4 結(jié)束語(yǔ) 隨著云計(jì)算技術(shù)的飛速發(fā)展,云存儲(chǔ)技術(shù)得到廣泛應(yīng)用,本文基于Openstack的swift云存儲(chǔ)技術(shù)開發(fā)了一套web云盤系統(tǒng),用戶登錄云盤系統(tǒng)后,便可通過(guò)瀏覽器在云盤上存儲(chǔ)和管理文件,文件保存在用戶的私人空間中,系統(tǒng)采用MD5算法對(duì)用戶密碼進(jìn)行加密處理,確保了用戶的數(shù)據(jù)安全。 參考文獻(xiàn): [1] [EB/OL]https://docs.openstack.org/swift/latest/api/object_api_v1_overview.html. [2] GU Gen-qiang, LI Qing-chun, WEN Xiao-long, et al. An overview of newly open-source cloud storage platforms[C]// Proceedings -2012 IEEE International Conference on Granular Computing, 2012:142-147. [3] Puttaswamy Krishna P N, Thyaga N, Murali K. Frugal storage for cloud file systems [C]//EuroSys12 – Proceedings of the EuroSys 2012 Conference, 2012:71-84. [4] Maxim S, Christoph M. Implementation of cloud-RAID: A secure and reliable storage above the clouds [C]//Lecture Notes in Computer Science, 2013:91-102. [5] John Rhoton .[EB/OL]https://www.ibm.com/developerworks/cloud/library/ cl-openstack-overview/index.html.