歡迎光臨
每天分享高質量文章

SeaweedFS在.net core下的實踐方案

一直對分佈式的檔案儲存系統很感興趣,最開始關註淘寶的TFS(Taobao File System),好像擱淺了,官方地址無法訪問,github上面,各種編譯問題,無意間發現了SeaweedFS

鏈接seaweedfs

測試了一番,寫個應用的文章和.net core實踐的短文分享一下

SeaweedFS如何使用

SeaweedFS的Releases下麵下載成品,1.20(主要原因是懶,不想去編譯)

運行命令

weed master

再掛載兩個分佈的服務

weed volume -dir=D:/FileService/Volume/1 -max=1000 -mserver=localhost:9333 -port=8080

weed volume -dir=D:/FileService/Volume/2 -max=1000 -mserver=localhost:9333 -port=8081

我們在訪問一下

http://localhost:9333/dir/assign

傳回可能是這樣的內容

{“fid”:”1,1642d6a0d7″,”url”:”127.0.0.1:8081″,”publicUrl”:”127.0.0.1:8081″,”count”:1}

我們解釋一下

fid是我們需要的上傳的引數

publicUrl是我們實際上需要上傳的地址

我們這次上傳的標的地址是

http://publicUrl/fid
http://127.0.0.1:8081/
1,1642d6a0d7

上傳的引數file是對應的檔案,上傳型別是form-data,就是標準的html表單提交方式

傳回你的型別可能是

{    “name”: “150106109346115258.jpg”,    “size”: 206354,    “eTag”: “9e663632”}

這個etag,經常做web快取的人,肯定不陌生,http快取的策略

訪問地址則為

http://127.0.0.1:8081/1,1642d6a0d7
http://127.0.0.1:8081/1/1642d6a0d7
http://127.0.0.1:8081/1/1642d6a0d7/150106109346115258.jpg

SeaweedFS支持多資料中心,這個在官方github有提到,SeaweedFS自帶健康檢查,內部走的GRPC做健康檢查,所以請保持分佈的服務端口,外界可訪問,無論是docker還是虛擬機、VPS,最終上傳還是走的那個端口

.Net Core下的實踐

我們先把兩個傳回的物體物件做一下

我們再根據這兩個物體,設計一個上傳服務

再設計一個註入的引數

public class SeaweedFSServiceConfiguration
{
public string BaseUrl { get; set; } = localhost:9333;               public string DirAssign { get; set; } = /dir/assign;
}

DirAssign這個是預設的引數,如果要用資料中心的話,這個就可以自定義修改了

在Startup.cs的註入一下

測試檔案上傳

先寫一個擴展方法,我們希望看見的傳回地址是

http://127.0.0.1:8081/1,1642d6a0d7
http://127.0.0.1:8081/1/1642d6a0d7

這個地址的後者

實現如下

寫一個控制器測試上傳

構建一下傳回引數和入參

   public class UploadFileResponseModel
{
public string FileName { get; set; }
}

   public class UploadFileRequestModel
{
public IFormFile File { get; set; }
}

控制器代碼如下

我們用postman測試一下

ok,上傳成功,我們訪問

http://localhost:9333/4,1ca657cf3f
http://localhost:9333/4/1ca657cf3f
http://127.0.0.1:8080/4,1ca657cf3f
http://127.0.0.1:8080/4/1ca657cf3f

前面兩個地址會轉跳到後面兩個地址

後記

我這代碼測試,會出現,不傳回name欄位的情況

{
“name”: “150106109346115258.jpg”,
“size”: 206354,
“eTag”: “9e663632”
}

這種json格式是直接上傳的傳回

但是我們這個上傳服務會變成

{
“size”: 206354,
“eTag”: “9e663632”
}

我見了鬼了,誰有發現原因,請告訴我一下,拜托了

原文地址:https://www.cnblogs.com/NCoreCoder/p/10254503.html

赞(0)

分享創造快樂