using WebDrop.FileProtocol; using WebDrop.Sync; namespace WebDrop.FileApi; /// 配置节 "FileApi"。环境变量形式:FileApi__DataDir、FileApi__Secret …… public sealed class FileApiOptions { public string DataDir { get; set; } = "files-data"; /// 和主后端共用的密钥(主后端的 WebDrop:Files:Secret),至少 32 个字符 public string Secret { get; set; } = ""; /// 前端所在的源;浏览器直接把文件传给这里,必须列出,否则不发 CORS 头 public string[] CorsOrigins { get; set; } = []; /// 创建频道时可以分配的文件空间档位(字节);不配置用内置的 1/5/10/50/100 GiB。默认值不放在数组里:配置绑定会把数组按下标合并进默认值 public long[] QuotaChoices { get; set; } = []; /// 创建频道时不选择的默认文件空间,必须是档位之一 public long DefaultQuota { get; set; } = 10L << 30; public FileDomainOptions Domain => new(EffectiveChoices, DefaultQuota); public long[] EffectiveChoices => QuotaChoices.Length == 0 ? FileDomainOptions.Fallback.QuotaChoices : QuotaChoices.Where(n => n > 0).Distinct().Order().ToArray(); /// 上传了字节、却一直没有被确认(没有登记到主后端)的条目,过多少小时删掉。默认 24 public int PendingRetentionHours { get; set; } = 24; /// 磁盘上最多存这么多字节,0 表示不限。满了拒绝新的帧(507),已有的不受影响 public long MaxStoreBytes { get; set; } /// 一帧的最大字节数:26 字节头部 + 最大负载(1 MiB + 16 字节标签) public int MaxFrameBytes { get; set; } = 26 + (1 << 20) + 16; /// 每天把新增的文件帧同步到外部存储(S3 协议)。已删除的内容在备份里再留 RetainDays 天 public DailyBackupOptions Backup { get; set; } = new() { Time = "04:30" }; }