vfd-cloud——一個適合練習上手的雲端儲存網盤springboot專案(開發中)
阿新 • • 發佈:2021-01-29
# vfd-cloud
[![](https://img.shields.io/badge/springboot-2.4.0-blue)](https://spring.io/projects/spring-boot) [![](https://img.shields.io/badge/Release-v1.0.0-brightgreen)](https://github.com/vfdxvffd/vfd-cloud/releases/tag/v1.0.0) [![](https://img.shields.io/badge/%E9%A1%B9%E7%9B%AE%E5%9C%B0%E5%9D%80-vfd--cloud-red)](http://vfdxvffd.cn:8080) [![](https://img.shields.io/badge/Github-%E9%A1%B9%E7%9B%AE%E4%BB%93%E5%BA%93-orange)](https://github.com/vfdxvffd/vfd-cloud)
> 一個基於SpringBoot的雲端儲存網盤專案,適合練手學習SpringBoot,用到的技術棧列到了下面。支援使用者的註冊登陸及修改密碼,利用郵箱進行驗證。支援檔案上傳下載以及刪除。支援資料夾的建立刪除。
![](https://img2020.cnblogs.com/blog/1786642/202101/1786642-20210129101952393-585104385.png)
## 一、核心技術棧
### 後端
- SpringBoot2
- MyBatis
- Redis
- RabbitMQ
- MySQL
### 前端
- Html5+Css+JavaScript
- JQuery
- Bootstrap
- Thymeleaf
## 二、專案計劃
- [x] 賬戶資訊管理模組
- [x] 檔案上傳下載刪除模組
- [x] 資料夾管理模組
- [ ] 檔案的加密解密處理模組
- [ ] 檔案分享模組
- [ ] 管理員對使用者的管理模組
- [ ] 檔案檢索模組
- [ ] 等等其他模組(以後增加)
### 1. 賬戶資訊管理模組
```mysql
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
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、檔名等等資訊進行檢索
## 三、寫在最後
專案只完成了初步的基本功能,歡迎大家訪問專案倉庫[![](https://img.shields.io/badge/Github-%E9%A1%B9%E7%9B%AE%E4%BB%93%E5%BA%93-orange)](https://github.com/vfdxvffd/vfd-cloud),如果喜歡,希望能點一個star!!!大家一起進步!後續會按照計劃開發剩餘