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/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下的实践方案相关推荐
- 在asp.net core 下定义统一的入参和出参格式
在使用.net core 开发Api的过程中,为了统一输入参数的格式,并增加一些全局必须含有的字段,比如:Code,Message,Lang等等,能采取的变通方式还是有几种的,然而都不够优雅,为了需求 ...
- 对于高并发的理解及实践方案
目录 01 如何理解高并发? 02 高并发系统设计的目标是什么? 2.1标题宏观目标高并发绝不意味着只追求高性能,这是很多人片面的理解. 2.2 微观目标 2.2.1 性能指标 2.2.2 可用性指标 ...
- .net core下简单构建高可用服务集群
一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...
- 1w字详解 ClickHouse漏斗模型实践方案(收藏)
作者:互联网大数据团队- Wu Yonggang 日常工作中做为数仓开发工程师.数据分析师经常碰到漏斗分析模型,本文详细介绍漏斗模型的概念及基本原理,并阐述了其在平台内部的具体实现.针对实际使用过程的 ...
- 爬取抖音数据实践方案《进阶版》
这篇文章是续上一篇(爬取抖音数据实践方案<基础版>).根据实际情况,落地的方案是:mitmdump+模拟器+python脚本+mysql数据库. 最终达到的效果截图: 接下来我把上面方案拆 ...
- 电商搜索“优化商品排序”实践方案
一.案例背景 某导购类电商APP,与淘宝天猫等一线商家合作,亿级商品索引量,类目和子类目多层嵌套,商品有不同子款式和尺码,搜索和筛选需求复杂. 通过采用分销+券模式,优惠券帮助普通C用户降低了单品价格 ...
- 华为CIO陶景文:共同探索数字化转型的实践方案
公众号回复:干货,领取价值58元/套IT管理体系文档 公众号回复:ITIL教材,领取最新ITIL4中文教材 华为全联接2021第二日,华为董事.CIO陶景文参加大会并做了以<共同探索数字化转型的 ...
- View UI Plus开源项目实践方案
View UI Plus开源项目实践方案 这个作业的要求是:开源实践第 3 次作业:提出你的开源实践项目计划 实践的项目是:View UI Plus 和我合作的同学是: 贾涛远 杨朔尧 张泽灏 文章目 ...
- 内容理解、内容生成、内容推荐分发,在广告场景下的实践和探索(京东张政)
内容理解.内容生成.内容推荐分发,在广告场景下的实践和探索(京东张政) 提示:广告也好,商品也罢,内容们,需要精准地推荐给用户,使其点击观看或者够买啥的,都需要走通一个重要流程:内容理解与推荐分发,更 ...
最新文章
- 40.多进程同步--锁--多把锁
- 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析
- 基于Visual C++2013拆解世界五百强面试题--题18-程序结果分析2-终结篇
- 让 Git 全局性的忽略 .DS_Store
- 预留空间过大的OutOfMemoryError
- AcWing 904. 虫洞(SPFA or Djakarta or bellman判负环)
- 全新Linux+Python高端运维班第一次作业
- (转)全球17大业务安全事件发布
- Refactoring: Encapsulate Collection
- ​比较一下主流国际快递系统 国际快递公司如何选择
- 创翼软件linux版本,创翼客户端_创翼客户端下载[2021官方最新版]创翼客户端安全下载_
极速下载...
- 凤凰服务器系统,凤凰系统云服务器
- 当代移动通信发展四个阶段
- 影驰名人堂送的机器人_6999元纯白信仰!影驰GTX 1080 Ti HOF名人堂评测
- 2019考研英语熟词生义
- 拼图(九宫格,十六宫格)
- linux不可用于文件名的符号,Linux 文件名中包含特殊字符
- java调用dll 指针参数_java调用c dll,指针参数和结构体参数搞定
- 050 XSS通关小游戏——xss challenge
- wince植入胎压监测_【折腾】小菲wince车载导航功能扩展
热门文章
- Effective_STL 学习笔记(二十七) 用 distance 和 advance 把 const_iterator 转化成 iterator...
- 数据库(二)tab补全功能,使数据库支持简体中文,日志管理,备份脚本
- Mac Ubuntu ----端口被占用
- eclipse各种配置
- VC++的dll中接收消息
- 昨日搬至办公室的书籍
- Lucifer的一场暴强围英雄表演
- 基于事件驱动架构构建微服务第12部分:向Apache KAFKA生成事件
- 技术分享 | 业务模板的技术实践
- 在 .NET 中创建对象的几种方式的对比