基于Openstack的云计算技术与应用专业Web云盘设计与实现

2018-11-15 01:33曾新洲
电脑知识与技术 2018年20期

曾新洲

摘要:Openstack Swift是一个高度可用的、分布式的、最终一致的对象存储。组织可以使用Swift高效、安全、廉价地存储大量数据[1]。高职云计算技术与应用专业学生可利用openstack对象存储技术,搭建Swift服务器,并在该服务器上开发Web云盘系统,实现用户注册、登录,文件上传、下载、复制、移动、删除、搜索等功能,极大地方便了高职院校师生远程管理个人数据,节约存储成本。

关键词:Openstack;Swift;云计算技术与应用专业;Web云盘

中图分类号:TP311 文献标识码:A 文章编号: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

隨着计算机网络技术的飞速发展,全球数据量以每2年翻一番的速度快速增长,近2年产生的数据量相当于人类有史以来所有数量的总和,预计到2020年,全球数据量将达到35ZB,大容量网络存储已经成为网民紧缺的需求。近年来,基于Openstack的云计算技术快速发展,思科、IBM、阿里云、华为等各大厂商纷纷加入Openstack项目,基于Openstack平台的阿里云、腾讯云、华为云、百度云纷至沓来,基于云存储的网盘技术得到了长足的应用[2]。通过使用云盘,用户可以随时随地办公,并能实现数据的快速备份和恢复,避免可能出现的数据风险[3-4], Openstack中有三个与存储相关的组件:swift对象存储、glance镜像存储和cinder块存储[5]。

2015年10月教育部将“云计算技术与应用”专业列入高职专业目录,高职“云计算技术与应用”专业主要培养云计算系统规划、云平台搭建、云平台部署与运维和云计算应用开发等岗位的高素质技术技能型人才,高职云计算机技术与应用专业学生利用所学专业知识,搭建openstack swift服务器,并在该服务器上开发出基于B/S架构的web云盘系统,实现用户注册、登录、文件上传/下载、新建文件夹、文件/文件夹的复制/移动/重命名/删除等功能。高职师生可将个人数据保存在web云盘中,方便师生管理个人数据,节约存储成本,并可实现数据的远程备份和迁移。

1 系统功能设计

web云盘具有用户管理、文件夹管理、文件管理和回收站管理四大功能,其中用户管理包括用户注册、用户登录和修改用户信息。文件夹管理功能包括新建、复制、移动文件夹等,文件管理功能由文件分类管理、文件上传、下载、复制、移动、搜索等构成,回收站管理包括还原文件/文件夹和清空回收站两大功能,web云盘系统功能设计如图1所示。

2 数据库系统设计

Web云盘系统包含两类数据信息:用户信息和文件信息,文件保存在swift服务器内以用户名命名的容器中,无须创建文件信息表,web云盘系统采用MySQL数据库,使用t_user数据表保存用户信息,如表1所示。

3 功能实现

3.1 程序架构

Web云盘系统采用jsp+hibernate+spring实现,图2为系统的包结构图,表2为包对应的功能。

3.2 用户管理

用户注册成功后,采用MD5算法将用户密码加密后保存在数据表t_user的password字段中,同时,在swift服务器中创建两个容器:主容器、垃圾箱容器,主容器以“登录用户名”命名,垃圾箱容器以“garbage_登录用户名”命名,用户登录时,输入的用户名、密码提交给后台的控制逻辑UserController.java进行处理,控制逻辑根据用户输入的用户名获得User对象,如果User对象为空,表明用户不存在,弹出“该用户不存在”对话框;如果User对象不为空,则采用MD5算法将用户输入的密码转换成密文,再与User对象中的密码进行比较,密码一致,则进入主界面,否则,弹出“密码错误”对话框。

3.3 文件夹管理

为了便于存储和提取web云盘中的文件,需将所有的文件分类保存在文件夹中,实现文件的分类管理,同时文件夹管理还包括新建、重命名、复制、移动、删除文件夹等功能。

3.3.1 新建文件夹

用户点击“新建文件夹”按钮,弹出对话框提示用户输入文件夹名,文件夹名不能包含“/”“.”等特殊字符,且不能为空,用户输入的文件夹名以ajax的方式传递给后台的createdir.action进行处理,后台页面采用spring MVC模式中的请求注解@RequestMapping获得文件夹名,并调用SwiftDFS的createDir方法在swift服务器的用户主容器中创建该文件夹。

3.3.2 复制文件夹

在进行文件夹复制操作时,需要将源文件夹下的整个文件系统复制到目标文件夹,包括源文件夹下的所有文件和文件夹,文件夹的复制操作采用递归方式实现。文件夹复制流程如图3所示。

3.4 文件管理

3.4.1 文件分类管理

Web云盘可根据文件类型进行管理,文件类型包括全部文件、我的文档、我的图片、我的视频、我的音乐、垃圾箱等。用户点击“全部文件”可显示所有的文件/文件夹信息,在该界面中可进行文件/文件夹的所有操作,包括上传、下载、新建文件夹、复制、移动、删除、搜索等,用户登录成功后,后台页面将文件/文件夹列表信息返回给前台main.jsp页面,在main.jsp页面中,通过标签循环遍历文件/文件夹列表,并将列表信息以表格的形式显示出来,每行显示一个文件/文件夹信息,显示内容包括文件名、文件位置、大小、修改日期和复选框,如图4所示。

3.4.2 文件重命名

用户选中某个文件/文件夹时,显示“删除”“下载”“重命名”“复制”“移动”按钮,用户点击“重命名”按钮后,弹出重命名对话框。在前台页面main.jsp中需要对用户的输入的新文件名做以下出错处理:

1) 新文件名中不能包含“/”等特殊字符;

2) 新文件名不能为空;

3) 同时只能对一个文件进行重命名操作;

4) 新文件类型与老文件类型必须一致。

用户输入的信息正确时,将用户输入的信息传递给后台的rename.action进行处理,后台程序调用SwiftDFS的renameDir方法或renameFile方法更新swift服务器中的相应文件名。

3.4.3 下载

下载是云盘的一个重要功能,分为单文件下载和多文件下载,下载单个文件时,首先将云盘中的文件写入到字符数组中,然后再构建response响应对象,设置响应的MIME类型和响应头,最后将字符数组输出到客户端浏览器界面。主要代码如下所示:

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);

下载多个文件时,需要将多个文件放在以第一个文件命名的文件夹中,并将文件夹进行打包处理,最后将打包文件作为响应返回给客户端浏览器。

3.5 回收站管理

回收站中用于存放用户删除的文件夹和文件,用户可一次还原多个文件或文件夹,同时也可清空回收站中的文件。

3.5.1 还原文件/文件夹

在回收站中,以表格形式呈现已删除的文件和文件夹,每一个文件/文件夹占据表格的一行(在这我们将每一行称为一条记录),每条记录包含以下信息:复选框、文件名/文件夹名、文件大小、文件修改日期。在恢复文件/文件夹时,遍历表格中的所有行,找出选中的行,将选中行的文件名/文件夹名(含路径,路径名与文件名之间用大于号隔开)保存在一个字符串中,多个文件名/文件夹名之间用逗号隔开,并将该字符串传递给后台页面处理,后台页面分离出需要恢复的文件/文件夹名,再调用backGarbageFile方法将文件/文件夹恢复到用户容器中,核心代码如下:

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 結束语

随着云计算技术的飞速发展,云存储技术得到广泛应用,本文基于Openstack的swift云存储技术开发了一套web云盘系统,用户登录云盘系统后,便可通过浏览器在云盘上存储和管理文件,文件保存在用户的私人空间中,系统采用MD5算法对用户密码进行加密处理,确保了用户的数据安全。

参考文献:

[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.