NAS 文件存储(Aegis.FileManager.Nas)
Aegis.FileManager.Nas 是 Aegis.FileManager 的一个实际存储实现,把文件读写落到 NAS 或共享目录。
组件概览
| 字段 | 说明 |
|---|---|
| 组件名称 | NAS 文件存储 |
| 真实类库 | Aegis.FileManager.Nas |
| 组件定位 | 基于 NAS / 本地共享目录的文件存储实现 |
| 引入方式 | 安装 NuGet,并在 Component.deps.json 的 Services 中启用 NasFileManager |
| 组件声明 | NasFileManager |
| 核心能力 | IFileManager 实现、按分组存取文件、复用文件校验能力 |
| 主要配置 | NasStorage、FileValidation |
什么时候要用它
适合场景:
- 你要把业务文件统一存到 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 的校验层完成,所以这两层通常是一起用的。