File-service

一个基于ASP.NET Core的可伸缩、通用的文件服务器。
通常后端项目可能会有头像、图片、音频、视频等上传/下载需求,这些需求都可以抽象为文件服务。

功能特点

  • 支持Linux(推荐)、Windows

  • 可伸缩式架构,支持部署1-N台文件服务器

  • RESTful架构的API接口,支持多语言客户端

  • 支持文件秒传、断点续传、远程拉取上传

  • 支持为用户指定磁盘空间配额

  • 支持自定义文件处理器

项目地址

https://github.com/md-frank/file-service

系统架构

  • 文件的上传/下载通常由客户端直接与文件服务器交互,上传时需要提供代表用户身份token(由业务服务器生成),成功后会返回文件根地址。

  • 也可以直接由业务服务器上传返回文件根地址给客户端。

  • 源码中包含基于.Net Standard的服务端SDK,可以生成token、上传文件等

  • 源码中包含基于.Net Standard的客户端SDK,可以上传/下载文件等

后端使用

配置业务服务器

//Startup.cs代码片段public void ConfigureServices(IServiceCollection services)
{    //....services.AddFileService(opts =>{opts.Host = "fs.mondol.info"; //文件服务器域名opts.AppSecret = "xxxxxx"; //加密密钥,需要与文件服务器相同});
}

生成访问令牌

IFileServiceManager fileSvceMgr; //此实例可通过DI框架获得//根据业务规定其意义,例如:1-代表管理员,2-代表用户var ownerType = 2;var ownerId = 2; //如果ownerType=2,则为用户IDvar validTime = TimeSpan.FromDays(2); //token有效期var ownerToken = fileSvceMgr.GenerateOwnerTokenString(ownerType, ownerId, validTime);

前端使用

文件上传

IFileServiceClient fileClient; //此实例可通过DI框架获得var ownerToken = "业务服务器返回的token";var periodMinute = 0; //有效期,0不过期var updResult = await fileClient.UploadAsync(ownerToken, "文件路径", periodMinute);var url = updResult.Data.Url; //得到文件根地址

URL格式说明

完整URL格式是这样的:https://domain.com/{fileToken}/{handler}/{modifier}
fileToken:是本次上传文件的唯一标识符
handler:文件处理器,可以是image(图片处理器)、video(视频处理器)、raw(返回原文件)等
modifier:【可选】文件处理器参数,例如,image处理器,可以指定128x128_png

文件上传成功后返回的文件根地址(updResult.Data.Url)就是截至到https://domain.com/{fileToken},URL后面部分由客户端自己去拼接

下面举例说明:

下载原文件
文件根地址/raw,例如:
http://file.domain.com/files/1iYQTU7fEUgaa~URSVwaCqQKFml_IAAAAAgAAAAbhmsFjiUUQwCPn2ngI1QcvsSp0AA/raw

下载128x128大小的缩略图(原文件是图像)
文件根地址/image/128x128,例如:
http://file.domain.com/files/1iYQTU7fEUgaa~URSVwaCqQKFml_IAAAAAgAAAAbhmsFjiUUQwCPn2ngI1QcvsSp0AA/image/128x128

下载128宽,高等比缩放的缩略图(原文件是图像)
文件根地址/image/128x,例如:
http://file.domain.com/files/1iYQTU7fEUgaa~URSVwaCqQKFml_IAAAAAgAAAAbhmsFjiUUQwCPn2ngI1QcvsSp0AA/image/128x

原图是JPG格式,下载png格式的图像
文件根地址/image/raw_png,例如:
http://file.domain.com/files/1iYQTU7fEUgaa~URSVwaCqQKFml_IAAAAAgAAAAbhmsFjiUUQwCPn2ngI1QcvsSp0AA/image/raw_png

原图是JPG格式,下载png格式的128x128大小的缩略像
文件根地址/image/128x128_png,例如:
http://file.domain.com/files/1iYQTU7fEUgaa~URSVwaCqQKFml_IAAAAAgAAAAbhmsFjiUUQwCPn2ngI1QcvsSp0AA/image/128x128_png

原文地址:https://www.cnblogs.com/mondol/p/file-service.html

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

开源文件服务器file-service介绍相关推荐

  1. 弹性文件服务(Scalable File Service,SFS)

    弹性文件服务(Scalable File Service,SFS) 弹性文件服务(Scalable File Service,SFS)提供按需扩展的高性能文件存储(NAS),可为云上多个弹性云服务器( ...

  2. node python做游戏服务哪个适合做服务端_当前的几种开源游戏服务端介绍

    当前的几种开源游戏服务端介绍 pomelo Pomelo 是基于 Node.js 的高性能.分布式游戏服务器框架.它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复 ...

  3. FPGA开源网站和论坛介绍

    学习FPGA,找不到资料?-FPGA开源网站和论坛介绍 碎碎思 目录 学习FPGA,找不到资料?-FPGA开源网站和论坛介绍 1.25个FPGA开源网站 1.1 http://OPENCORES.OR ...

  4. AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍

    AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...

  5. 条形码/二维码之开源利器ZXing图文介绍

    全文目录: 基本介绍 二维码(比如:QRCode)的编码和解码演示 条形码(比如:EAN-13)的编码和解码演示 [一]. 基本介绍 : 1-1. ZXing是一个开源Java类库用于解析多种格式的条 ...

  6. 开源部门文件服务器,开源文件服务器

    开源文件服务器 内容精选 换一换 将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式.本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云服务器的操作 ...

  7. Web service 介绍与简单应用

    一.Web service 介绍 什么是 Web service 到目前为止对 Web service 没有统一的定义,这里以一种更容易理解的方式解释.Web service 是一个平台独立的,低耦合 ...

  8. 容器编排技术 -- Kubernetes DNS Pod 与 Service 介绍

    容器编排技术 -- Kubernetes DNS Pod 与 Service 介绍 1 介绍 2 怎样获取 DNS 名字? 3 支持的 DNS 模式 3.1 Service 3.1.1 A 记录 3. ...

  9. 开源中文切词工具介绍

    开源中文分词工具介绍 这里介绍常用的开源中文分词工具,大部分是java实现.如果是java生产环境,建议使用ansj.word或HanNlp. Bakeoff是一个国际中文处理比赛,有多个语料,所以每 ...

  10. 简账(开源记账软件)-功能介绍

    文章目录 简账(开源记账软件)-功能介绍 前言 一.主要技术栈简介 二.主要功能 三.项目难点 四.总结 简账(开源记账软件)-功能介绍 前言 由于自己有记账的需求,在尝试使用过市面上的记账软件后,发 ...

最新文章

  1. Sql Server函数全解(四)日期和时间函数
  2. 7、kubernetes 核心技术-Controller 控制器
  3. Ubuntu 下最简明的翻译词典(调用GoogleAPI,运行在终端)
  4. Java开发与技术挑战——关于技术的技术思考
  5. docker安装启动nginx详细步骤
  6. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
  7. java 压缩gz_如何在Java中将.zip压缩为.gz?
  8. Docker中快速安装Redis
  9. WebAssembly 的 Wasmer JNI
  10. 网络流量分类方法调研
  11. uniapp开发微信小程序,多行文本换行,动态改变文字区域宽度
  12. 75道程序员面试逻辑思维题及答案解析
  13. Ubuntu 16.04 LTS安装XDM下载神器
  14. 【http】微信网站使用的是http80端口或者https443端口访问
  15. VLookup函数详细教程
  16. mac彩色球转不停,Mac电脑一直在转圈怎么办?
  17. 机器人笔记本清灰_小熏的编程日记 » 愉悦的小机器人调教经历(一):使用笔记本为HTC G4提供无线路由...
  18. 梅州放射性实验室建设布局要求分析
  19. 转 影像质量评估之锐利度--MTF(SFR)
  20. 卫星位置计算的c语言,C语言-详细计算GPS卫星位置.doc

热门文章

  1. NetCore2.0Web应用之Startup
  2. SAP的SqlAnyWhere中数据库日志文件删除后如何新建
  3. [webpack3.8.1]Guides-4-Output Management(输出管理)
  4. 2017-03-10Git版本回退
  5. 稍微成型点的用WEBSOCKET实现的实时日志LOG输出
  6. lambda与内置函数
  7. 小菜学设计模式——观察者模式
  8. 【转】Ubuntu 修改hosts
  9. 深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
  10. 非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)