golang 實戰企業網盤

一、功能需求

1.基於golang實現分佈式文件上傳服務

2.ceph和阿里雲oss

3.支持斷點續傳和秒傳功能

4.微服務化和容器部署

 

二、項目使用到的技術

redis

mysql

rabbitmq

docker部署微服務

ceph分佈式存儲

阿里雲oss

 

三、收穫乾貨

文件分塊斷點續傳/秒傳

對象從私有云遷移到阿里雲oss的經驗

 

四、項目進度

4.1 系統設計和搭建框架

接口列表

接口描述

接口url

文件上傳接口

POST /file/upload

文件查詢接口

GET /file/query

文件下載接口

GET /file/download

文件刪除接口

POST /file/delete

文件重命名接口

POST /file/update

這塊的命令是可以進行優化的,增刪改查是對應http restful api的

定義文件元信息的結構fileMeta

文件的唯一標識是什麼?可用文件內容計算的md5值或sha1值作爲文件名

 

4.2 文件上傳功能

1.用戶請求是HTTP GET,則返回上傳頁面

2.用戶請求是HTTP Post,則解析form信息,生成fileMeta文件元信息

3.真實文件存儲到本地磁盤,文件元信息(如文件名稱,文件大小,文件sha1,存儲位置,更新時間等)存儲到mysql數據庫中

4.上傳成功後,http重定向到“上傳成功頁面”

 

4.3 文件下載功能

1.解析用戶請求中的filehash值

2.根據filehash從mysql數據庫中獲取文件元信息

3.根據文件元信息中的文件位置FileLocation,讀取文件內容返回給客戶端

3.設置http的header頭部,客戶端接收到迴應後纔會當成是文件下載(而不是數據內容)

w.Header().Set("Content-Type", "application/octect-stream")
w.Header().Set("Content-Description", "attachment;filename=\""+fm.FileName+"\"")

 

4.4 獲取及更新文件元信息

從mysql數據庫獲取文件元,以json形式返回給客戶端

更新文件元信息,包括更改文件名,文件大小,文件路徑

 

4.5 刪除文件元信息

1.從Form表單中,解析出filehash值

2.根據filehash值,獲取文件元信息

3.根據文件元信息,刪除磁盤上的真實文件

4.從mysql數據庫中刪除該文件的信息

 

4.6 用戶註冊和登錄功能

註冊功能

1.獲取Post請求中Form表單的用戶名和密碼

2.將密碼+固定字符串經過sha1處理,加強安全性,即使數據庫泄漏了,密碼也不會泄漏

3.將用戶名密碼以及其他信息都寫入到mysql數據庫中

 

登錄功能

1.解析用戶請求中Form,得到用戶名和密碼

2.將密碼和固定字符串進行sha1運算,得出加密後的密碼

3.從mysql數據庫中獲取用戶名和密碼

4.兩者對比,看是否符合

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