肖盛文,曾玉林
(四川大学锦城学院 计算机与软件学院,四川 成都 611731)
随着现代计算机科学技术和5G 网络的飞速发展,传统数据资源管理的方式已经变得不再适用于当下这个高速发展的社会,而且伴随着我国数据资源总量的增加和不断拓宽,在有限的网络带宽下如何高效、快捷地利用和传输我国各地的数据资源也已成为一个重要课题。网络云盘管理系统是一个由多门技术紧密相连、综合交叉而形成的针对用户信息管理的软件,其主要作用是用户利用电脑或者其他终端设备对信息的管理操作,为人们提供了一个便捷、安全、传输效率高的云存储平台系统。
用户功能:一是用户可以随时随地通过网页访问网络云盘系统,通过邮箱或者电话号码,填写个人信息,设置密码进行注册。二是用户通过注册后,登录密码即可访问系统。三是用户登录本系统后,可通过电脑、手机对云盘空间进行编辑,可以在云盘中实现对文件夹的创建、删除与命名。四是用户随时都可以选择本地的文件,进行文件的上传、下载、分享、命名与删除,其中文件上传功能所支持的文件数据类型包含了所有文档类型的数据,以及图片类型的数据、音频类型的数据、视频类型的数据、压缩文件类型的数据。
管理员功能:管理员拥有账户的登录、注销、头像上传的功能。管理员可以对用户系统所有功能进行设置,其中主要包括了对所有系统用户的运行权限设置,通过此功能可以给用户设置或添加特定权限以方便用户使用,也可以通过此功能限制非法用户的登录使用。管理员可以对用户云盘空间进行资源分配,设置云盘空间大小等。管理员系统能够对注册用户的系统日志信息进行实时管理,方便了系统管理员查看注册用户的系统运行以及操作过程的记录。管理员可以对用户数据进行备份管理。
网络云盘管理系统的使用者主要为需要对数字信息进行管理的用户。基于社会上一些的座谈以及市场调研等,发现网络云盘管理系统所需要的基本性能特点表现为响应时间快、可修改性强、界面简洁、方便新手用户的使用。由于网络云盘管理系统需要承受大量用户的并发访问,因此需要考虑“高并发技术”这一广义的概念,在设计之初,就要贯穿整个项目,从服务器到数据库设计等环节解决高并发带来的问题[1]。
网络云盘管理系统采用BS 架构,主要应用于windows 系统上,运用Spring Boot、mybatis、mvc 框架来进行设计,编译环境采用JDK1.8、maven3.6,数据库采用MySQL5.7,服务器代理工具采用Nginx1.9。
数据库设计:数据库管理着网盘系统的数据信息,其在遇到高并发大量数据的请求时,对数据库的优化可以大大增加系统性能。MYSQL 一个数据库表的日均承载并发数据量通常是百万数量级,如果数据量再往上增长,其性能就一定会出现大幅度的下降,所以为了有效地减轻数据库在高并发情况下的运行压力,本项目采用分库设计,其根据用户表中的id 进行水平切分,以5 万为分界线,具体设计如下[2]:
用户信息表user Infor 用来存储系统用户和管理员的所有相关信息,字段名包含了用户id、用户创建时间、用户修改时间、用户名、用户密码、用户性别、用户邮箱、用户电话、用户头像、用户状态码以及用户权限id。系统文件夹表System Folder 用来存储用户所创建文件夹的相关信息,字段名包含了文件夹id、文件夹创建和修改的时间、文件名、父级文件夹id、用户id以及文件夹状态码。其中父级文件夹id 用于关联自身文件夹id、用户id 用于关联用户表中用户id。系统文件表System File用来存储系统用户所上传文件的各种相关数据信息,字段名包含了文件的id、文件的创建与最后一次修改时间、文件的名称、文件状态、文件大小、所属的文件夹id、所属的用户id、文件的存储路径、文件的md5 值。系统权限表System Permissions用来存储用户的权限信息,字段名包含了权限id、用户等级、硬盘空间大小、用户签到天数。五是系统日志记录表,用来存储用户操作记录的信息,字段名包含了日志id、日志创建与修改的时间、用户名、用户操作信息。文件分享表用来存储用户分享文件的信息,字段名包含了文件分享id、文件创建与修改的时间、分享时间、接收密码、分享状态、分享文件名、分享文件的类型、所属用户的id。七是数据库备份表,拥有的字段有数据id、数据创建时间与修改时间、备份文件名、备份用户名。
登录拦截设计:为了防止非法用户登录系统进行破坏,网络云盘系统设置了登录拦截。第一步在类Login Interceptor 类中实现Handler Interceptor 接口,重写preHandle 方法,获取登录时所有的session 信息,如果关于用户的信息全部为空,则判断为非法用户,强制将页面按照重定向转移到登陆页面;若该信息值不为空,则予以放行。第二步是向配置类中添加拦截器信息,并设置不需要经过拦截器的请求和前端页面。
数据访问层设计:User Dao 接口中,定义了根据用户的id查询用户所有信息的方法;根据用户姓名查询用户所有信息的方法;对用户信息添加、编辑,根据用户id 删除用户信息,查询用户总条数的方法。File Dao 接口中,定义了数据文件的添加、编辑,查询的方法;根据文件id 获取特定文件,删除特定文件,获取所有文件,获取指定目录下的文件的方法;查询文件的MD5 值,根据文件类型来查询所有文件,批量更新文件,获取文件总数量,获取文件大小的方法。Folder Dao 接口中,定义了对文件夹的添加、编辑,查询所有文件夹的方法;根据id 和指定文件夹名称进行查询的方法;根据id 和指定文件夹名称进行删除的方法;获取所有指定文件夹下的所有文件夹列表,获取所有指定文件夹下的子文件夹列表,批量修改文件夹,批量删除文件夹,获取文件夹数量的方法。Log Dao 接口中,定义了日志添加、编辑,查询所有日志记录,根据日志id 删除单条日志,批量删除日志的方法。Permissions Dao 接口中,定义了用户权限的添加、编辑的方法。Share Dao 接口中,定义了文件分享信息的添加、编辑,根据id 查询分享文件的方法;根据id 删除分享文件的信息,查询分享文件的列表,查询分享次数,查询分享文件是否过期的方法。
业务层设计:本层主要负责对数据访问层的操作,通过调用Dao 层里的方法,把需要分页显示的数据封装为一个分页实体对象。将该层类对象注入IOC 容器,通过模块控制层调用相应的方法。
模块控制层:本层主要功能是用于负责具体的各个业务管理模块流程的控制,在此通过调用各个具体业务层的接口来进行流程控制。在各个业务模块控制类中接收前端发送的请求,并调用业务层相对应的方法,把数据以json 键值对的形式返回给前端[1]。
一是验证码控制器,在前端发送验证码请求时,调用验证码生成器来生成验证码,将验证码的信息存入session,并将验证码的图片以字节流的形式传给前端进行验证。二是用户管理控制器,用于实时控制管理系统中用户的登录,注册,注销,以及用户的CRUD 操作,接收对用户操作的请求,并调用业务层中的方法对用户数据进行操作。三是文件下载控制器,用于用户下载他人分享的文件,先根据下载链接查询出需要下载的文件,再调用response 为其添加头信息,指定这个文件大小,在浏览器中能够显示下载进度,最后把文件以流的形式发送到前端。四是文件上传控制器,用于控制文件的上传,从前端获取文件对象,首先判断文件大小是否大于总空间大小,如果文件大于总空间大小,则直接返回错误信息;如果文件大小小于内存空间大小,则计算文件的MD5 值,根据计算的MD5 值与该用户数据库中存储所有的文件MD5 值进行比较,判断其是否已经存在,如果存在,则报出错误信息;如果不存在,则开始上传,并将文件的信息存入数据库。五是文件显示控制器。先从session 里获取用户信息,再根据用户信息查询其拥有的文件,首先查询该用户根目录下所有的文件以及文件夹信息,如果不是根目录,再根据文件夹id 查询其子目录文件夹以及文件信息。六是文件CRUD 控制器,对于查询请求,根据文件名字进行模糊匹配或者根据文件类型进行查询;对于添加请求,首先判断其是文件或是文件夹的添加,再调用业务层中的方法。对于删除请求,首先要判断待删除的是文件还是文件夹类型,如果是文件类型,则直接删除;如果是文件夹类型,则直接递归删除其子文件夹下的所有文件以及文件夹。七是文件分享控制器,显示分享页面时,首先判断分享的文件是否已经删除或者分享时间过期,如果删除或是过期则返回错误信息。如果是加密分享,则需要输入分享密码才能显示。八是日志控制器,用于对日志信息的控制管理,接收查询日志信息的请求,通过调用业务层里对应的方法,把日志信息封装为一个分页对象;接收删除日志的请求,将待删除日志的id 存入一个数组,通过数组遍历依次删除对应的日志信息。九是权限控制器,用于对用户权限的CRUD 操作。
在用户文件上传和下载的过程中,如果文件上传和下载的体量过大,由于网速带宽不能满足当下的需求,所以网络云盘系统在文件上传和下载时引入多线程机制,首先在主线程中把传送的文件名称发送给服务器,然后将待上传或下载的文件分为多个子模块,再建立多个子线程,每个子线程负责传输其中一块数据,最终待所有线程执行完毕,把所有资源结合起来。这样,用户在上传和下载大体量的文件时,不仅提高系统效率,还大大增加了用户的体验感[3]。因为存储空间有限,所以需要最大限度地使用云盘空间,为了防止重复的文件上传到云盘,在上传文件时,会对文件进行MD5 加密得到相应的密文,通过用户id 查询数据库中相对应的密文进行比较,如果验证相等,则提示用户上传文件在云盘空间中已存在,不用再次上传[4]。
本文的网络云盘实现了管理数字信息等功能,为用户提供了一个方便、安全且高效的云存储平台,有效地解决用户对于数字化信息管理这一需求。从高并发角度,数据加密角度对系统优化,提高了系统的安全性能以及用户体验感。展望未来,对于数字化资源管理的需求将越来越大,所以针对网络云盘管理系统的设计与实现是非常具有意义的。