一直对分布式的文件储存系统很感兴趣,最开始关注淘宝的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/fidhttp://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

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

SeaweedFS在.net core下的实践方案相关推荐

  1. 在asp.net core 下定义统一的入参和出参格式

    在使用.net core 开发Api的过程中,为了统一输入参数的格式,并增加一些全局必须含有的字段,比如:Code,Message,Lang等等,能采取的变通方式还是有几种的,然而都不够优雅,为了需求 ...

  2. 对于高并发的理解及实践方案

    目录 01 如何理解高并发? 02 高并发系统设计的目标是什么? 2.1标题宏观目标高并发绝不意味着只追求高性能,这是很多人片面的理解. 2.2 微观目标 2.2.1 性能指标 2.2.2 可用性指标 ...

  3. .net core下简单构建高可用服务集群

    一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...

  4. 1w字详解 ClickHouse漏斗模型实践方案(收藏)

    作者:互联网大数据团队- Wu Yonggang 日常工作中做为数仓开发工程师.数据分析师经常碰到漏斗分析模型,本文详细介绍漏斗模型的概念及基本原理,并阐述了其在平台内部的具体实现.针对实际使用过程的 ...

  5. 爬取抖音数据实践方案《进阶版》

    这篇文章是续上一篇(爬取抖音数据实践方案<基础版>).根据实际情况,落地的方案是:mitmdump+模拟器+python脚本+mysql数据库. 最终达到的效果截图: 接下来我把上面方案拆 ...

  6. 电商搜索“优化商品排序”实践方案

    一.案例背景 某导购类电商APP,与淘宝天猫等一线商家合作,亿级商品索引量,类目和子类目多层嵌套,商品有不同子款式和尺码,搜索和筛选需求复杂. 通过采用分销+券模式,优惠券帮助普通C用户降低了单品价格 ...

  7. 华为CIO陶景文:共同探索数字化转型的实践方案

    公众号回复:干货,领取价值58元/套IT管理体系文档 公众号回复:ITIL教材,领取最新ITIL4中文教材 华为全联接2021第二日,华为董事.CIO陶景文参加大会并做了以<共同探索数字化转型的 ...

  8. View UI Plus开源项目实践方案

    View UI Plus开源项目实践方案 这个作业的要求是:开源实践第 3 次作业:提出你的开源实践项目计划 实践的项目是:View UI Plus 和我合作的同学是: 贾涛远 杨朔尧 张泽灏 文章目 ...

  9. 内容理解、内容生成、内容推荐分发,在广告场景下的实践和探索(京东张政)

    内容理解.内容生成.内容推荐分发,在广告场景下的实践和探索(京东张政) 提示:广告也好,商品也罢,内容们,需要精准地推荐给用户,使其点击观看或者够买啥的,都需要走通一个重要流程:内容理解与推荐分发,更 ...

最新文章

  1. 40.多进程同步--锁--多把锁
  2. 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析
  3. 基于Visual C++2013拆解世界五百强面试题--题18-程序结果分析2-终结篇
  4. 让 Git 全局性的忽略 .DS_Store
  5. 预留空间过大的OutOfMemoryError
  6. AcWing 904. 虫洞(SPFA or Djakarta or bellman判负环)
  7. 全新Linux+Python高端运维班第一次作业
  8. (转)全球17大业务安全事件发布
  9. Refactoring: Encapsulate Collection
  10. ​比较一下主流国际快递系统 国际快递公司如何选择
  11. 创翼软件linux版本,创翼客户端_创翼客户端下载[2021官方最新版]创翼客户端安全下载_ 极速下载...
  12. 凤凰服务器系统,凤凰系统云服务器
  13. 当代移动通信发展四个阶段
  14. 影驰名人堂送的机器人_6999元纯白信仰!影驰GTX 1080 Ti HOF名人堂评测
  15. 2019考研英语熟词生义
  16. 拼图(九宫格,十六宫格)
  17. linux不可用于文件名的符号,Linux 文件名中包含特殊字符
  18. java调用dll 指针参数_java调用c dll,指针参数和结构体参数搞定
  19. 050 XSS通关小游戏——xss challenge
  20. wince植入胎压监测_【折腾】小菲wince车载导航功能扩展

热门文章

  1. Effective_STL 学习笔记(二十七) 用 distance 和 advance 把 const_iterator 转化成 iterator...
  2. 数据库(二)tab补全功能,使数据库支持简体中文,日志管理,备份脚本
  3. Mac Ubuntu ----端口被占用
  4. eclipse各种配置
  5. VC++的dll中接收消息
  6. 昨日搬至办公室的书籍
  7. Lucifer的一场暴强围英雄表演
  8. 基于事件驱动架构构建微服务第12部分:向Apache KAFKA生成事件
  9. 技术分享 | 业务模板的技术实践
  10. 在 .NET 中创建对象的几种方式的对比