跳到主要内容
版本:3.0.0

NAS 文件存储(Aegis.FileManager.Nas)

Aegis.FileManager.NasAegis.FileManager 的一个实际存储实现,把文件读写落到 NAS 或共享目录。

组件概览

字段说明
组件名称NAS 文件存储
真实类库Aegis.FileManager.Nas
组件定位基于 NAS / 本地共享目录的文件存储实现
引入方式安装 NuGet,并在 Component.deps.jsonServices 中启用 NasFileManager
组件声明NasFileManager
核心能力IFileManager 实现、按分组存取文件、复用文件校验能力
主要配置NasStorageFileValidation

什么时候要用它

适合场景:

  • 你要把业务文件统一存到 NAS 或挂载目录
  • 你需要最直接的文件管理落地方案
  • 你希望复用 Aegis.FileManager 的校验和抽象层

最小可运行路径

第一步:安装组件

dotnet add package Aegis.FileManager.Nas

第二步:在 Component.deps.json 中启用 NasFileManager

{
"Components": {
"Services": [
"NasFileManager"
],
"Middlewares": []
}
}

第三步:准备配置

{
"NasStorage": {
"RootPath": "/data/nas"
},
"FileValidation": {
"EnableValidation": true,
"StrictExtensionCheck": true
}
}

第四步:在业务里直接注入 IFileManager

public class AttachmentService
{
private readonly IFileManager _fileManager;

public AttachmentService(IFileManager fileManager)
{
_fileManager = fileManager;
}

public bool Upload(string fileName, Stream stream)
{
return _fileManager.UploadFile(fileName, stream, FileType.File, "visit-attachments");
}

public string GetUri(string fileName)
{
return _fileManager.GetFileUri(fileName, "visit-attachments");
}
}

groupName 是怎么用的

NAS 文件管理里,groupName 可以理解成业务分组目录。最常见的用法是:

  • 按业务模块分组,如 visit-attachments
  • 按租户分组,如 tenant-001
  • 按年月分组,如 2026/03

这样做的好处是:

  • 文件目录更容易管理
  • 同名文件冲突更少
  • 后续迁移和清理更方便

接入后怎么确认生效

通常用下面几项验收:

  • IFileManager 可以正常注入
  • 上传文件后,NasStorage:RootPath 下能看到对应分组目录
  • GetFileBytes(...)GetFileStream(...)DeleteFile(...) 都能正常工作
  • 文件校验仍然生效

扩展场景

如果你不是只要一个默认 NAS 管理器,而是要多个独立文件源,可以继续定义自己的 NasFileBase 子类,再按配置节注册。这类写法更适合扩展场景,不作为普通项目的默认接法。

常见问题

注入 IFileManager 成功了,但上传后找不到文件

优先检查:

  • NasStorage:RootPath 是否存在且具备读写权限
  • 上传时传入的 groupName 是否和读取时一致
  • 部署环境里挂载路径是否和配置路径一致

为什么还要保留 FileValidation

NasFileManager 负责存储;文件大小、扩展名和自定义规则仍然由 Aegis.FileManager 的校验层完成,所以这两层通常是一起用的。