一個基於SpringBoot的雲存儲網盤項目,適合練手學習SpringBoot,用到的技術棧列到了下面。支持用戶的註冊登錄及修改密碼,利用郵箱進行驗證。支持文件上傳下載以及刪除。支持文件夾的建立刪除。前端
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有效且匹配該郵箱則提供修改密碼的接口。mysql
使用消息隊列來作異步提升效率。註冊和修改密碼過程當中都涉及了兩個過程:將驗證信息存入redis、給用戶郵箱發送郵件。將這個兩個任務交給消息隊列作異步,而後給用戶返回信息。git
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、名字、大小、上傳時間、存放地址等等信息。github
上傳文件的時候用ajax發起異步請求,使用回調函數能夠獲取到上傳的字節數和總字節數,這樣就能夠監控上傳的進度。文件上傳結束後只須要異步刷新當前文件夾的內容就能夠實時呈現出效果。ajax
下載文件的時候經過設置響應頭中添加Content-Lenght
,就能夠下載的時候讓瀏覽器獲取到文件下載的進度。redis
刪除文件的時候爲了保證效率,即不讓用戶等待過久,只要數據庫中刪除記錄就返回刪除成功。而後用異步任務去真正刪除磁盤上的文件,這樣用戶能夠保證很快獲得反饋。另外設置定時任務定時檢查數據庫和磁盤中文件的對應,若是有孤立的文件(即數據庫中沒有記錄的文件)就將其刪除。算法
用相似鏈表的結果表示文件和文件夾的所屬關係,每一個文件都有一個父目錄id的屬性,表示的是它所在文件夾的id,這樣就能夠經過一個文件夾的id找到它目錄之下全部的文件和文件夾。spring
對於新建文件夾的邏輯和上傳文件相似,不過少了文件傳輸的過程,只須要在數據庫中添加相應的記錄便可。sql
刪除文件夾的時候要注意遞歸刪除這個文件夾下的全部內容,當用戶發起刪除請求時,在數據庫中刪除此文件夾的記錄。而它的子目錄子文件都有異步任務完成,這樣能夠保證效率,而同時爲了正確性,能夠添加定時任務,去定時檢查數據庫和磁盤的對應關係,以及是否有孤立的目錄(孤立目錄是指找不到父目錄的文件或者文件夾),若是有就將其刪除。數據庫
計劃採用國密算法進行加密
計劃採用連接分享,利用redis設置有效時限
計劃給文件添加tag,而後根據tag、文件名等等信息進行檢索
項目只完成了初步的基本功能,歡迎你們訪問項目倉庫,若是喜歡,但願能點一個star!!!你們一塊兒進步!後續會按照計劃開發剩餘模塊。