基於golang http包實現的文件服務器
代碼倉庫:https://github.com/danny-wang/repo
基本功能
- 壓縮模式或正常上傳
- 壓縮模式或正常下載
- 獲取文件服務器狀態,包括服務器域名(name:port),當前有多少文件等
- 獲取某一文件的狀態(創建時間,下載路徑,超時過期時間,MD5)
- 獲取某一個文檔中的所有文件的狀態(可指定是否遞歸進入子文檔,是否只匹配某一個後綴的文件)
- 刪除過期文件
- 備份數據庫
使用方式
方式一:直接使用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包管理工具來管理依賴包