随着互联网的发展,人们对数据存取需要变高。移动硬盘携带不便且价格昂贵不划算;现有的商用网盘系统个人体验较好,但存在付费、限速、限容的问题,且无法实现团队的定制需求。

本文基于Spring Boot,设计并实现了在线网盘系统。以推动改变传统单机或离线硬件存储方式,并满足不同的用户以及团体,对于网盘的个人定制和自由管理的需求,实现浏览器端便捷的数据上传、下载和分享的功能。充分提高办公、娱乐和学习效率,并且云存储可以方便对每个用户账号进行自定义的容量划分,充分利用存储空间,更加经济实惠,从而推动我国互联网、云存储技术与人民生活的充分融合以及云存储技术的发展。

同时为保证系统的安全性,设计了验证码防止恶意攻击;同时结合MD5算法检验文件完整新,以及DES算法保障文件的安全性和用户个人隐私。最终实现的系统经过测试,界面美观,功能完善,系统运行稳定,能够满足市场和个人的需求。并展望了对系统的优化,以提高用户体验

前言

1.1 本设计的目的与意义

随着移动互联网、云存储和大数据技术的迅猛发展,每个人对于数据的存储和读取的需求也不断增长,个人数据存储的网盘服务受到人们青睐。根据《2022年中国个人网盘市场研究报告》,预计截至到2022年底,我国的个人网盘的用户规模将接近5亿人,网盘服务和人们生活息息相关[1]。由于U盘和移动硬盘等存在不方便携带,且需要结合计算机使用的缺点;而且由于摩尔定律的逐渐失效,大容量的小型可移动硬盘价格仍然高昂[2]。因此基于云存储的个人网盘系统,能够满足用户的办公、娱乐、家庭场景下的各种需求,有着广阔的应用和发展空间。不断扩大的需求和市场促进了多样的服务,目前市面出现了多种网盘服务,在一定程度上方便了广大用户,满足了一定的需求;但是市面上的大多数网盘都是商业运营,大多数商用网盘服务都存在着限速、容量限制的问题,往往需要付费才能有较好的空间和时间体验,并且付费的会员制度性价比低[3]。这对推广个人云存储系统服务的应用和发展,以及云存储、互联网与居民生活的结合方面产生严重阻碍。因此如何获得更加个性化的定制和私人应用的网盘技术或服务,成为目前网盘系统技术的一大热点。

为解决上述问题,并满足个人或团体对于网盘系统的私人化、自由化、个性化的定制使用和管理。本文提出了一种基于Spring Boot框架的在线个人网盘系统,并进行设计和实现。以推动改变传统单机或离线硬件存储方式,并满足个人、家庭和团体等环境下,对数据的自由存储读取和共享的需求的自由使用,根据自身硬件空间、网速条件,提供更佳实惠和方便的网盘自行搭建的使用体验。从而充分提高办公、娱乐和学习效率。并且云存储可以方便对每个用户账号进行自定义的容量划分,充分利用存储空间,更加经济实惠,从而推动我国互联网、云存储技术与人民生活的充分融合以及云存储技术的发展。

1.2 国内外发展概况

1.2.2 国外发展概况

由于互联网发展较早,在国外基于云存储技术的网盘系统服务应用也十分成熟[4],有着高效的数据同步和共享功能。包括数据备份和在多个服务器上的分配的云端的经济型文件系统研究和应用十分成熟[5]。在技术研究方面,SchnjakinMeinel提出了利用RAID技术原理在总体上提高公共云存储服务系统的安全性和可靠性[6];Rupam Banerjee等人提出了一种基于密钥的云存储安全保护方法,从而解决云存储服务商不可靠或损害而导致的用户数据的损害[7];J Freilich等人研究了在不同层次的云存储之间传输数据的方法[8]。在产品应用方面,Google Drive和Microsoft OneDrive等云存储服务平台是用户最常使用的网盘系统;欧洲最大的云存储服务商之一Tresorit,该公司专注于为企业和个人提供安全、加密和隐私保护的云存储服务;以及韩国的Naver、印度的pCloud等,它们都为用户提供不同的特色功能和服务。这些技术和应用成就,促进了网盘系统的发展和进步,对于推动网盘系统的创新和发展,为用户提供更加高效、安全、智能的云存储服务做出了贡献。

1.2.2 国内发展概况

近年来,我国在云存储和网络硬盘领域的技术应用迅速发展。随着云计算技术的发展,传统的文件存储和管理方法逐渐被云存储解决方案所取代。中国在云存储和网络硬盘领域的技术应用发展为用户带来了巨大的便利。与传统存储解决方案相比,云存储更加灵活、可扩展和具有成本效益。这导致了中国出现了大量的云存储提供商和网络硬盘平台,为用户提供方便和高效的文件存储和共享服务。中国的网络硬盘市场由百度、腾讯、阿里巴巴等几个主要服务商主导,这些公司通过现有用户基础和品牌影响力积累了大量的用户[9];随着云计算和大数据技术的发展,越来越多的中小企业进入市场,为用户提供更多样化的云存储和网络硬盘解决方案。除此之外在技术研究方面,我国也取得长远的进步,已有研究成果通过 Openstack Swift 对象存储技术和混合云模式构建网盘系统,适用于校内场景[10];钟地秀等人结合图像识别的深度学习技术,将网盘数据管理实现智能化[11];同时,在不同应用场景有针对的网盘系统服务也得到研究和发展,如医院服务[12]。这些研究和应用产品,推动了云存储技术和互联网服务的发展,为智能化、数字化的社会建设起到了不可替代的作用。

1.2.3 发展概括总结

随着SpringBoot技术在近年来的快速发展,越来越多的开发者开始使用SpringBoot开发云存储和网络硬盘系统。SpringBoot为构建Web应用程序提供了简单易用的框架,可以大大降低开发时间和成本。此外,SpringBoot高度可定制,可以让开发者根据自己的具体要求定制自己的云存储解决方案。

综上,基于云技术的网盘系统在全球范围内得到广泛应用和发展,各个国家的网盘系统在服务内容、用户体验、数据安全等方面都有所创新和发展。对于未来的发展,人工智能技术和大数据分析等新兴技术的引入将进一步推动网盘系统的创新和发展,为用户提供更加高效、安全、智能的云存储服务。

1.3 本设计的主要内容

在线个人网盘系统是将互联网和云存储技术应用于个人生活的各个方面,功能是将现实网络数据生活中所产生或需要的数据充分利用互联网,进行存储和管理,从而提高工作效率,方便日常生活。本课题系统能够让用户登陆注册后能够使用已分配好的本地存储空间,并能够完成文件的上传、下载、共享等功能。且管理员用户能够对每一名用户进行存储空间分配和用户信息管理。并能根据用户需求,实现存储空间总容量的自行增加或缩减。实现真正的不限速、随时随地、不限空间的个人网盘体验。并提供方便的使用接口,如浏览器,手机APP等方式。实现完全的数据存储、读取、管理目的。本课题基于Spring Boot框架,设计并实现一个个人网盘系统,实现用户文件的在线管理、分享与下载。本文将围绕以下几个方面进行研究和设计:

1.需求分析,包括用户注册和登录,系统应该保障用户信息的安全性。用户可以将文件上传至网盘系统中,并可以在任意设备上下载。用户可以选择分享自己的文件,生成分享链接,并发送给其他人,使得其他人也可以查看和下载。系统支持根据文件类型、上传时间等条件对文件进行分类。且应有管理员用户对不同用户进行可用空间分配和用户管理。

2.技术方案:本系统的后端采用Spring Boot框架,实现了基本的登录、注册、文件上传下载等功能。前端使用Freemaker模板引擎,完成了网盘系统界面的设计和美化,通过JavaScript实现前端数据和后端逻辑的处理交互。系统数据库采用MySQL,存储用户信息和文件相关的数据。同时,本系统也考虑到了数据安全问题,使用了密码加密和文件加密等技术,保障了数据的安全性[13]

3.开发流程:依据软件工程设计规范和思想,按照需求分析、软件设计、编码、运行和维护等开发过程[14]。本课题采用B/S结构,开发语言包括JAVA、JSP和MySQL技术;开发工具基于Spring Boot框架。开发系统为Windows,测试和运行系统为Linux Ubuntu-20.04,编码工具为Idea。系统设计方面,结合面向对象设计思想,软件工程UML建模方法。通过上述研究方法和技术的学习和应用,为顺利开发出个人网盘系统,完成所需功能打下鉴定基础。

2 背景技术介绍

2.1 Sprint Boot框架

Spring Boot是轻量级的Web框架,简化了基于Spring框架的应用程序的开发过程。能够快速启动并提供多种组件,使开发人员可专注于业务逻辑的实现。Spring Boot减少了很多样板代码,同时提供了更加智能的默认配置,降低了开发和部署的复杂度。Spring Boot提供了多种方式来集成其他框架和组件[15],例如MyBatis、JPA、Thymeleaf;并且提供了多种方式来集成其他框架和组件,例如MyBatis、JPA、Thymeleaf等。为Java开发者提供了一种更加便捷、高效的开发方式。

2.2 JavaScript技术

JavaScript最初由Brendan Eich于1995年在Netscape公司创建,是一种高级编程语言,通常用于在Web浏览器中创建交互式和动态的用户界面。它是一种脚本语言,可以在Web浏览器中直接嵌入HTML文档中,也可以作为独立的脚本文件运行。JavaScript的主要特点是它可以与HTML和CSS结合使用,可以为Web应用程序提供丰富的交互和动态功能[16];通过AJAX异步方式实现同后端服务器的数据交换,实现Web应用程序性能和响应速度的提高。并且拥有许多流行的库和框架,如jQuery、React、Vue和Angular等,使开发者可以更快、更高效地编写代码。

2.3 Freemaker模板引擎

FreeMarker是一款流行的开源模板引擎,它可以帮助开发人员将数据模型和模板文件结合起来生成所需的输出。相比于JSP和Velocity等模板引擎,FreeMarker具有更高的性能、更好的灵活性和更高的可维护性。FreeMarker支持多种输出格式,包括HTML、XML、JSON等,并支持自定义标签库,可以轻松地扩展其功能。支持条件、循环和函数等常用语句和操作,可以帮助开发人员更加高效地处理数据和逻辑。它还具有良好的文档和社区支持,可以提供详细的教程和示例代码,方便开发人员学习和使用。

2.4 开发的硬件环境

通常情况下,开发人员需要在自己的工作台或办公室配备一台计算机,以进行软件开发和调试。此外,为了确保系统的性能和稳定性,需要在服务器端部署一定的硬件设备,如服务器、存储设备、网络设备等。同时,为了满足大规模用户访问需求,还需要在系统的架构设计中考虑负载均衡问题,这些也需要一定的硬件支持。因此,在系统的开发过程中,硬件环境的选择和配置也是非常重要的一部分,在开发阶段本系统使用个人计算机即可,针对本系统设计的特性,在线网盘系统需要提供为多名用户分配足够多的云存储空间,因此开发的硬件环境的存储空间容量应足够大,本设计在标准的512G固态硬盘的基础上,增加1T容量的机械硬盘。

指标

配置参数

主机型号

DELL G3 3509

CPU 型号

Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz

CPU 数量

1

显卡

NVIDIA GeForce GTX 1650 4GB

内存

DDR4 26667MHz 12GB

硬盘

SSD 512GB

磁盘

HDD 1024GB 

HDD 1024GB

2.5 开发的软件环境

相比传统客户端,浏览器易使用而且无需安装,因此本课题采用B/S结构,主要开发语言包括JAVA、MySQL;运行服务器为Spring Boot框架,Tomcat集成在其中,测试和运行系统为Linux Ubuntu-20.04。并且在软件开发中,充分应用软件工程和面向对象设计思想,在需求分析和数据库设计,使用UML方法。

表2-2 软件环境表

名称

版本

操作系统

Windows 10

开发工具

IDEA

数据库

MySql 8.0.32

软件开发工具包

JDK 1.8

3 需求分析

3.1 功能性需求分析

3.1.1 总体功能和作用

在线个人网盘系统是将互联网和云存储技术应用于个人生活的各个方面,功能是将现实网络数据生活中所产生或需要的数据充分利用互联网,进行存储和管理,从而提高工作效率,方便日常生活。

3.1.2 用户信息管理

根据对常见的B/S架构系统的学习,本项目应能支持用户注册和登录,同时在数据管理和登陆时,应采用多种方式使得系统能够保障用户信息和系统运行的安全性。本系统为针对高效使用环境,将的用户主要分为以下几类,教务处管理员、教师用户、研究生用户和本科生用户。用户登陆注册后能够根据用户类型使用已分配好的本地存储空间,可以在系统中设置自己的个人信息,包括头像、昵称、性别、个人简介等。教务处的管理员用户核心的作用是能够对普通用户进行存储空间分配和个人信息管理,能够对用户进行权限管理[17],以便更好地管理用户。并能根据用户需求,实现存储空间总容量的自行增加或缩减。

3.1.3 用户文件管理

文件管理是网盘系统的核心,该系统中用户可以上传文件到网盘中,用户通过右键弹出选项框选择下载的文件和存储位置。此外,应能支持用户创建文件夹,并可以设置文件夹的名称和描述信息,对文件夹进行分类和排序,便于快速查找。网盘系统的一大优势是充分利用互联网实现文件的共享,用户可以将自己的文件进行分享,分享后随机生成分享链接,且支持公开和私密多种分享方式,用户可以查看自己的分享链接,也可以取消分享或管理分享信息,并且分享的文件应该有期限[18]。为充分利用网盘的存储空间,应支持用户查看已删除的文件,并可以进行恢复或彻底删除操作,回收站中的文件会定期清理,保证系统的存储空间不被过度占用。最后,为保证用户文件的安全和可靠性,应设置文件加密功能。

3.1.4 用户存储空间管理

存储空间管理是网盘系统的核心之一,受到不同环境的限制以及工作条件的需求,系统应支持对用户的存储空间进行管理。每个用户能够查看自己的配额和当前空间的使用情况,从而合理的分配自己的文件,但只有管理员有权限对不同用户的存储空间总容量进行管理[19]。当用户上传或下载文件时,系统应能相应的对存储空间进行增加或减少。系统应能向用户展示当前的存储空间使用情况,如在主页通过图表的方式进行展示。

4 系统设计与实现

以前文需求分析的内容为核心,基于技术背景中的相关技术,对系统进行详细的设计和描述。包括系统的总体设计方案、网盘系统中用户管理、文件管理和存储空间管理模块设计的思路和实现、用户界面和数据库表的设计等。

4.1 系统体系结构

本网盘系统要求功能完善,界面美观流畅。在实现时基于Spring Boot技术实现各组件之间的关系耦合、通信和数据流动。系统的主要结构分别是View表现层、Service逻辑层、Controller表示层和Dao数据访问层。

表现层负责用户输入和输出以及展示信息,根据需求分析的内容,本系统的表现层实现分为两大类:用户和管理员端。用户端实现文件上传、下载和分享等操作;而管理员端实现对用户信息和存储空间管理的操作。

在本系统中,这一层主要包括用户的信息管理、网盘系统文件管理,如文件的下载、上传、分享等。这些内容主要实现了本系统中的核心逻辑,包括一些对数据库的操作,但这一层无需直接与数据库交互。在Spring Boot项目设计中这一层只需要实现接口即可,具体SQL语句定义在mapper文件夹中,通过这种方式能实现后端设计和数据库实现的分离,从而简便项目开发。

数据访问层是实现数据库操作定义的关键部分,是实现数据库操作定义的关键部分。除了本文中使用到的Spring Data JPA,还可以使用其他ORM框架,例如Hibernate,以较为便捷的且高的效率进行CRUD操作。并且数据的安全和可靠性也在这一层需要得到保证,防止数据丢失。在处理数据时,数据访问层需要考虑数据的事务性,以确保所有操作都能成功地提交或回滚。

总的来说,通过将系统进行分层的设计和实现,将整个系统划分为多个独立的层次,每个层次只关注自己的职责,层与层之间通过定义接口进行交互,各层只需要调用另一层提供接口而不需要纠结于具体的代码实现的细节,能够有效提高系统的可维护性和可扩展性[20]。同时,分层设计也方便团队协作开发,不同的团队可以分别负责不同层次的实现,降低了团队协作的成本。

4.2 数据库设计和实现

我们需要定义数据库的表、列、主键和外键等元素,并考虑如何将它们组织在一起。将数据通过数据库进行存储管理,能够提高系统运行的安全性和流畅性。通过数据库可以实现用户信息、存储文件、等数据信息的存储和读取。在某些方面,网盘系统就是充当一个大型友好的云端数据库。考虑到本系统开发运行时的环境的规模较小,因此选择了轻量级的MySQL数据库,在开发时实现较为简单,且能缩短数据查询响应的周期。

4.2.1 数据库概念设计

现实世界的信息复杂多样,为刻画现实世界的各种信息和联系,人们在进行具体的设计实现前,往往需要进行概念设计,将现实物理世界进行抽象,提取出共有的的特征,对事物进行表征。首先需要明确系统所需的数据实体及其属性,并设计实体之间的关系。对于个人网盘系统,主要涉及到文件、用户、文件夹等实体。这些实体有其关键的属性对其进行描述,此外,不同的实体之间存在不同的联系,在概念设计中,还需要考虑数据约束、数据完整性、数据一致性等方面的问题,以保证系统的稳定性和正确性。在此基础上,可以使用E-R图,即实体联系图等工具进行可视化的概念设计,并在实现时按照设计进行数据库的建表、索引等操作。经过分析本系统的各个实体的E-R图分别如下:

4.3 网盘功能设计和实现

4.3.1 概述

SpringBoot框架为方便开发,提供了多个模块的自动化配置,并且能够自动扫描多个包和组件[22].在设计开发过程中,前端通过freemaker的模板进行设计,在后端的功能中,由于网盘系统需要处理大量的文件上传下载操作,因此需要保证文件上传下载的性能和稳定性。同时需要确保用户上传的文件不含有恶意代码,并且防止用户的数据被随意窃取,需要防范网络攻击和数据泄露等安全问题。对于数据的加密,系统需要使用一种可靠的加密算法,比如对称加密和非对称加密,对文件进行加密操作,确保文件在存储和传输过程中的安全性和完整性。此外可设计权限控制的拦截器,在请求处理前进行权限判断。具体来说,当用户请求某个URL时,首先获取当前登录的用户,然后获取该用户所属角色的所有权限,如果该URL不在用户权限列表中,则进行以下操作:判断是否是Ajax请求,如果是,则使用JSON格式返回无权限提示。如果不是Ajax请求,则使用重定向到无权限提示页面。如果该URL在用户权限列表中,则放行该请求。

综上,在开发过程,充分结合软件工程设计思想,进行分模块的设计和迭代。下面分别详述按照模块划分,实现的系统各个功能模块。

4.3.2 登陆注册功能

登陆注册功能模块是任何一个网站或应用程序的核心部分之一,是用户身份验证的基础,也是保护用户数据安全的必要措施。在注册时用户需要提供一些必要的个人信息,如用户名、密码、邮箱等;用户通过用户名和密码进行登陆。为保护用户密码的安全性可用户输入的密码进行哈希处理,可以将密码加密后再存储到数据库中,可以保证数据安全性。用户名密码和数据库匹配成功后,获取当前登录的用户,然后获取该用户所属角色的所有权限,根据用户类型跳转到不同系统界面,此外根据用户名加载该用户的存储空间和头像等信息。可设计对应的登陆跳转拦截器类,在每个界面跳转时判断是否具有对应权限[23]。同时还需要填写验证码,以确保登陆注册行为不是机器人所为,增加安全性和真实性。验证码的设计是为了防止自动程序恶意破坏系统,从而保证网盘系统的安全性。本系统的验证码通过单独一个生成类实现,在类中预先设计好验证码的字符集和字体格式;随机抽取几个字符并通过不同的字体进行展示,并随机生成干扰线条。

4.3.3 文件管理功能

文件管理基于文件夹管理,两者具体实现类似。在本论文中,文件夹管理模块将被实现为一个单独的子系统。为了方便用户管理文件夹,本系统还将实现一个简单的文件夹树结构,用户可以通过该结构来浏览、选择和操作文件夹。另外,为了保证文件夹名称的唯一性,系统会检测用户输入的文件夹名称是否与已有的文件夹名称重复,如果重复则会提示用户重新输入。文件管理是个人网盘系统最核心的功能之一,每一个文件的数据库设计时存储有不同的文件夹id,以此将不同的文件和相应的文件夹进行关联,当用户点击某个文件夹时,根据文件夹id查询所有属于这个文件夹的文件,并进行展示。不同用户能享受的功能菜单有所不同,但都包括文件的上传、下载、删除。下面分点详述文件管理的功能。

4.3.3.1 文件下载

文件下载是指将云端存储空间中的文件下载到本地计算机上。用户可以在个人网盘中选择要下载的文件,并进行下载操作。下载操作的主要工作流程是:用户登录系统后,进入个人网盘页面,在网页端选择要下载的文件,并发送下载请求到服务器。服务器收到请求后,查询数据库中该文件的文件路径和文件名,后端读取指定文件路径下的文件,将文件以二进制流的方式返回给前端;前端接收到文件后可以直接打开并进行保存。

4.3.3.2 文件上传

文件上传是指将本地计算机上的文件上传到个人网盘系统中,保存在云端存储空间,即存储在服务器中的存储空间中。文件上传需要用户登录后方可操作,用户登录系统后,进入个人网盘页面;用户点击“上传文件”按钮,通过选择要上传的文件,前端使用AJAX将文件上传至服务器,服务器接收到请求后,为该文件生成一个唯一的文件名和文件路径;并将文件名和路径存储在数据库中;服务器将用户上传的文件保存到指定的文件路径中。上传成功后,前端提示用户上传成功。

4.3.3.3 文件删除

文件删除是指将云端存储空间中的文件删除。用户在网盘中选择要删除的文件,点击删除按钮。系统弹出确认提示框,确认用户是否要删除该文件,也可选择点击右键,弹出选项列表,可选择删除单个文件。当点击确认后,系统会将文件的删除标志置为“已删除”状态,并提示用户文件删除成功,并且重新加载此页面的文件列表,而回收站模块则能够查询到所有已经删除的文件,并可在回收站中通过相反操作恢复文件。此外如果删除的文件是已经分享给别人的文件,那么当其他用户查看分享的链接时,会提示该文件已经被删除无法查看。

4.3.3.4 文件分享

分享是指本系统的注册用户通过本系统将自身网盘中的文件分享给其他用户以提供查看和保存的功能。文件分享也是网盘系统的核心功能之一,通过分享可以利用互联网便捷的实现文件的转存。本文中的项目用户可将自己网盘中的文件进行分享,有公开和加密两种方式,分享成功后会生成唯一的分享链接,其他用户在本系统输入这个链接即可跳转到分享的文件的页面,从而能够保存到自己网盘或者下载到本地。

4.3.4 文件加密功能

在网盘系统中,为了保证文件的完整性和安全性,使用加密算法实现。MD5是一种哈希算法,它将任意长度的数据映射为固定长度的数据,通常是32个字符的16进制字符串。MD5加密算法是单向不可逆的,即无法通过加密后的结果反推出原始数据,因此可以保证数据的完整性[24]。此外项目还设计了DES加密,并设计了相关类,这是一种对称加密算法,用于保护数据机密性,它使用相同的密钥进行加密和解密[25]。在网盘系统中,当用户上传文件时,服务器会对文件进行加密,并将加密后的结果存储到数据库中。当用户下载文件时,服务器会先对下载的文件进行加密,然后与数据库中存储的密码值进行比对,以保证文件的完整性和安全性。

4.3.5 用户可用空间管理功能

由于不同的用户具有不同的可用存储空间,因此在本项目中存储空间管理也是至关重要。在数据库的角色类型设计时,就为不同用户设计了不同的存储空间大小。通过计算该用户目前网盘空间所有文件的大小和,判断是否超过空间容量。此外为方便系统的定制化,管理员用户能够管理每个用户的用户类型中的存储空间字段,从而便捷的实现空间的扩容和缩减。

4.3.6 用户菜单功能管理

为方便进行用户功能管理,较为常见的做法是向页面添加组件,但本系统通过设计菜单管理功能,可以非常方便的实现代码和组件功能的服用。通过设计不同按钮功能的父菜单,再指定按钮组件的图标和路径,在浏览器渲染页面时,根据菜单管理中添加的功能,将其展示在不同的页面上。通过这种方式可以非常方便的管理不同用户应该具备怎样的功能列表。

5 系统测试

完成代码编写后,将项目部署在服务器系统上,通过Idea实施项目,连接数据库,启动项目后在本地进行回环测试。本系统运行过程的功能界面展示如下:

带上你的千军万马,虽然终究难免孤军奋战