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,則為用戶ID
var 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