開源文件服務器file-service介紹


file-service

一個基於ASP.NET Core的可伸縮、通用的文件服務器。
通常后端項目可能會有頭像、圖片、音頻、視頻等上傳/下載需求,這些需求都可以抽象為文件服務。

功能特點

  • 支持Linux(推薦)、Windows
  • 可伸縮式架構,支持部署1-N台文件服務器
  • RESTful架構的API接口,支持多語言客戶端
  • 支持文件秒傳、斷點續傳、遠程拉取上傳
  • 支持為用戶指定磁盤空間配額
  • 支持自定義文件處理器

項目地址

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

系統架構

Scheme

  • 文件的上傳/下載通常由客戶端直接與文件服務器交互,上傳時需要提供代表用戶身份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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM