基於golang http包實現的文件服務器

基於golang http包實現的文件服務器

代碼倉庫:https://github.com/danny-wang/repo

基本功能

  1. 壓縮模式或正常上傳
  2. 壓縮模式或正常下載
  3. 獲取文件服務器狀態,包括服務器域名(name:port),當前有多少文件等
  4. 獲取某一文件的狀態(創建時間,下載路徑,超時過期時間,MD5)
  5. 獲取某一個文檔中的所有文件的狀態(可指定是否遞歸進入子文檔,是否只匹配某一個後綴的文件)
  6. 刪除過期文件
  7. 備份數據庫

使用方式

方式一:直接使用curl命令調用:

上傳文件:

普通模式上傳:上傳文件和服務器中的文件一致

curl  -F "file=@bolt" -F dest=/jianwang/bolt.txt  -F expiredTime=2h  -F replaceIfExist=false  "http://localhost:50010/r/upload/"

返回值:

{"Status":0,"Msg":"file exist","File":{"CreateTime":"0001-01-01T00:00:00Z","Md5":"","ExpiredTime":"0001-01-01T00:00:00Z"}}

壓縮模式上傳:對於上傳的文件會使用gunzip解壓縮,然後存儲到文件服務器中。假設被上傳的文件是使用gzip壓縮後的壓縮文件。

curl -H "Content-Encoding: gzip"  -F "[email protected]" -F dest=/jianwang/3.png  -F expiredTime=2h  -F replaceIfExist=false  "http://localhost:50010/r/upload/"

返回值:

{"Status":0,"Msg":"OK","File":{"CreateTime":"2017-11-22T15:43:08.397174566+08:00","Md5":"e16b119e535c5ebbe8b59ef766335f1c","ExpiredTime":"2017-11-22T17:43:08.397178023+08:00","DownloadPath":"http://localhost:50010/r/download/jianwang/3.png"}}

下載文件

Normal download: 正常下載,服務器不會壓縮數據進行傳輸
curl -O http://localhost:50010/r/download_file/jianwang/ads.111
Gzip compress mode to download:  指定服務器可以以壓縮方式傳輸文件,客戶自己負責解壓與否
curl -H "Accept-Encoding: gzip"   http://localhost:50010/r/download_file/jianwang/ads.111 | gunzip >a.dmg

其他請求可以直接閱讀repo.go中的註釋

方式二:客戶端代碼調用

參考repo/client/test.go中的代碼

方式三:通過網頁

直接訪問 http://localhost:50010/r/list/,即可查看數據庫中的文件

主要技術

  • 使用boltdb文件數據庫存儲數據庫中文件的元信息
  • 以json格式傳輸調用的返回值
  • 使用協程定期刪除過期的文件
  • 存儲文件的MD5碼來方便的比較服務器中的文件是否與本地一致
  • 使用glide包管理工具來管理依賴包
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章