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!!!大家一起進步!後續會按照計劃開發剩餘模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章