vfd-cloud——一个适合练习上手的云存储网盘springboot项目(开发中)
vfd-cloud
一个基于SpringBoot的云存储网盘项目,适合练手学习SpringBoot,用到的技术栈列到了下面。支持用户的注册登陆及修改密码,利用邮箱进行验证。支持文件上传下载以及删除。支持文件夹的创建删除。

一、核心技术栈
后端
- SpringBoot2
- MyBatis
- Redis
- RabbitMQ
- MySQL
前端
- Html5+Css+JavaScript
- JQuery
- Bootstrap
- Thymeleaf
二、项目计划
- [x] 账户信息管理模块
- [x] 文件上传下载删除模块
- [x] 文件夹管理模块
- [ ] 文件的加密解密处理模块
- [ ] 文件分享模块
- [ ] 管理员对用户的管理模块
- [ ] 文件检索模块
- [ ] 等等其他模块(以后增加)
1. 账户信息管理模块
mysql> desc user_login;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| email | varchar(50) | NO | UNI | NULL | |
| password | varchar(50) | NO | | NULL | |
| name | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
用户账户的注册、登陆以及修改密码采用邮箱验证,注册过程中向邮箱发送验证码,并将验证码存入redis,设置一定时间的有效期,在有效期内注册即视为注册成功。修改密码过程中,将一段用作验证的UUID存入redis,设置有效期,向邮箱发送一个修改密码的链接,验证如果链接中的UUID有效且匹配该邮箱则提供修改密码的接口。
使用消息队列来做异步提高效率。注册和修改密码过程中都涉及了两个过程:将验证信息存入redis、给用户邮箱发送邮件。将这个两个任务交给消息队列做异步,然后给用户返回信息。
2. 文件上传下载删除模块
mysql> desc file;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| len | int(11) | NO | | NULL | |
| pid | int(11) | NO | PRI | NULL | |
| location | varchar(50) | NO | | NULL | |
| type | int(11) | NO | | NULL | |
| time | datetime | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
文件的管理使用mysql来存储信息,后面计划加入非关系型数据库来存储某些信息。每个文件都有一个id的属性,表示它的父目录的id,这样就类似一个链表,给出一个目录的id,就可以通过select * from file where fid = ${id}获取到此文件夹下的所有文件目录。另外文件的数据表中还有文件id、名字、大小、上传时间、存放地址等等信息。
上传文件的时候用ajax发起异步请求,使用回调函数可以获取到上传的字节数和总字节数,这样就可以监控上传的进度。文件上传结束后只需要异步刷新当前文件夹的内容就可以实时呈现出效果。
下载文件的时候通过设置响应头中添加Content-Lenght,就可以下载的时候让浏览器获取到文件下载的进度。
删除文件的时候为了保证效率,即不让用户等待太久,只要数据库中删除记录就返回删除成功。然后用异步任务去真正删除磁盘上的文件,这样用户可以保证很快得到反馈。另外设置定时任务定时检查数据库和磁盘中文件的对应,如果有孤立的文件(即数据库中没有记录的文件)就将其删除。
3. 文件夹管理模块
用类似链表的结果表示文件和文件夹的所属关系,每个文件都有一个父目录id的属性,表示的是它所在文件夹的id,这样就可以通过一个文件夹的id找到它目录之下所有的文件和文件夹。
对于新建文件夹的逻辑和上传文件类似,不过少了文件传输的过程,只需要在数据库中添加相应的记录即可。
删除文件夹的时候要注意递归删除这个文件夹下的所有内容,当用户发起删除请求时,在数据库中删除此文件夹的记录。而它的子目录子文件都有异步任务完成,这样可以保证效率,而同时为了正确性,可以添加定时任务,去定时检查数据库和磁盘的对应关系,以及是否有孤立的目录(孤立目录是指找不到父目录的文件或者文件夹),如果有就将其删除。
4. 文件加密模块
计划采用国密算法进行加密
5. 文件分享模块
计划采用链接分享,利用redis设置有效时限
6. 文件检索模块
计划给文件添加tag,然后根据tag、文件名等等信息进行检索
三、写在最后
项目只完成了初步的基本功能,欢迎大家访问项目仓库,如果喜欢,希望能点一个star!!!大家一起进步!后续会按照计划开发剩余模块。
vfd-cloud——一个适合练习上手的云存储网盘springboot项目(开发中)的更多相关文章
- 搭建nextcloud私有云存储网盘
简介: 搭建个人云存储一般会想到ownCloud,堪称是自建云存储服务的经典.而Nextcloud是ownCloud原开发团队打造的号称是“下一代”存储. 真正试用过后就由衷地赞同这个Nextclou ...
- 使用OwnCloud建立属于自己私有的云存储网盘
1.需要LAMP架构 实验环境:centos7.4 64位系统[root@xuegod63 ~]# yum install -y httpd php php-mysql mariadb-server ...
- CentOS 7 使用OwnCloud建立私有云储存网盘
使用OwnCloud建立属于自己私有的云存储网盘 OwnCloud概述: OwnCloud 一款文件主机服务软件,就是我们平时使用的云存储,不过这是在自己主机的服务器上建立属于自己的私有云,OwnCl ...
- 百度云百度网盘VIP不限速破解版绿色版-实测可用
百度云百度网盘不限速VIP破解版绿色版-下载地址:https://www.90pan.com/b1548999
- 项目开发中封装一个BarButtonItem类别-很实用
Encapsulates a TabBarItem--封装一个BarButtonItem类 在我们程序的导航栏的左边或右边一般都会有这样的BarButtonItem,用来界面之间的跳转 如果我们有很多 ...
- 可道云kodexplorer网盘未清理造成linux服务器爆满的解决方法
今天登陆宝塔面板的时候发现硬盘占用37GB,已经变红提示我空间不足了,惊呆了, 还以为是宝塔抽风了,去远程连接服务器看了一下,懵逼了. df -h 查看挂载目录使用情况 还是不相信现实的我又重启了一下 ...
- 基于owncloud构建私有云储存网盘
注意事项:需要ping通外网 需要LAMP架构yum -y install httpd php php-mysql mariadb-server mariadb sqlite php-dom php- ...
- Java使用百度云存储BCS-让你的数据下载飞起来
作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 云也不是一个新概念了,云到底是什么东西,你叫我说个明明白白的我也说不出来,姑且算作联网的就叫做云.国内的云服 ...
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
如何在Visual Studio 2017中使用C# 7+语法 前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...
随机推荐
- C++STL教程
1 什么是STL? STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Libr ...
- Jenkins 持续集成实现 Android 自动化打包
打 debug 包流程: git pull 分支最新代码 Android Studio:Build - Generate Signed APK 从 IDE 里可以看到,实际上该操作是执行了 assem ...
- hashmap有一个loadFactory为什么是0.75从泊松分布解析看看
简述: 写这篇文章是看到网上的一篇面试题,有面试官问hashmap有一个loadFactory为什么是0.75 我先解释一下 0.75上下文,当一个hashmap初始数组大小暂时不考虑扩容情况,初始 ...
- MQ关于实现最终一致性分布式事务原理解析
本文讲述阿里云官方文档中关于通过MQ实现分布式事务最终一致性原理 概念介绍 事务消息:消息队列 MQ 提供类似 X/Open XA 的分布式事务功能,通过消息队列 MQ 事务消息能达到分布式事务的最终 ...
- 「每日一题」有人上次在dy面试,面试官问我:vue数据绑定的实现原理。你说我该如何回答?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 来源:原创 一.前言 文章首发在「松宝写代码」 2020. ...
- 解决Github下载仓库慢的正确姿势
上个月刚安装了 Manjaro ,然后最近在Manjaro下载Github的项目竟然只有几十b/s,这能忍?对于下载Github上的代码是硬需求,没办法直接探索一下突破的方法了. 方法一:安装chro ...
- MySQL 中的WAL机制
本文主要概括的是 WAL 机制涉及的三种日志,具体与其他组件的联系.执行可查看 一条 sql 的执行过程详解 .MySQL中的事务原理和锁机制 . 是什么 WAL,全称是Write-Ahead Log ...
- 三、hadoop、yarn安装配置
本文hadoop的安装版本为hadoop-2.6.5 关闭防火墙 systemctl stop firewalld 一.安装JDK 1.下载java jdk1.8版本,放在/mnt/sata1目录下, ...
- 最实用的visual studio插件,值得收藏!
1.ReSharper(VS必装,代码重构.代码修正功能) ReSharper 是一个JetBrains公司出品的著名的代码生成工具.其能帮助Microsoft Visual Studio成为一个更佳 ...
- 网络爬虫第一步:通用代码框架(python版)
import requests def getHTMLText(url): try: r=requests.get(url,timeout=30) r.rais ...