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下的实践

我们先把两个返回的实体对象做一下

SeaweedFS在.net core下的实践方案

SeaweedFS在.net core下的实践方案

我们再根据这两个实体,设计一个上传服务

SeaweedFS在.net core下的实践方案

再设计一个注入的参数

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

DirAssign这个是默认的参数,如果要用数据中心的话,这个就可以自定义修改了

SeaweedFS在.net core下的实践方案

在Startup.cs的注入一下

SeaweedFS在.net core下的实践方案

测试文件上传

先写一个扩展方法,我们希望看见的返回地址是

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

这个地址的后者

实现如下

SeaweedFS在.net core下的实践方案

写一个控制器测试上传

构建一下返回参数和入参

    public class UploadFileResponseModel
    {
        public string FileName { get; set; }
    }
    public class UploadFileRequestModel
    {
        public IFormFile File { get; set; }
    }

控制器代码如下

SeaweedFS在.net core下的实践方案

我们用postman测试一下

SeaweedFS在.net core下的实践方案

 

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

前面两个地址会转跳到后面两个地址

SeaweedFS在.net core下的实践方案

 

后记

我这代码测试,会出现,不返回name字段的情况

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

这种json格式是直接上传的返回

但是我们这个上传服务会变成

{
    "size": 206354,
    "eTag": "9e663632"
}

我见了鬼了,谁有发现原因,请告诉我一下,拜托了

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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

SeaweedFS在.net core下的实践方案