Quellcode durchsuchen

feat: 添加配置文件和启动配置支持

📝 配置更新:
- 更新 Upload.json,新增 MultiOSS 配置支持
- 新增 SysFileProvider 实体定义
- 更新 Startup.cs,注册文件存储相关服务

🔧 Startup.cs 改进:
- 注册 SysFileProviderService 服务
- 注册 IOSSServiceManager 为单例以保持缓存
- 注册 MultiOSSFileProvider 服务
- 完善 Swagger 文档配置
- 优化 OpenAPI 配置

🎯 配置特性:
- 支持多OSS存储提供者配置
- 向后兼容现有配置
- 提供完整的服务注册
王韩广 vor 6 Monaten
Ursprung
Commit
6224155311

+ 4 - 0
Admin.NET/Admin.NET.Application/Configuration/Upload.json

@@ -25,5 +25,9 @@
     "Port": 8222,
     "Username": "sshuser",
     "Password": "Password.1"
+  },
+  "MultiOSS": {
+    "Enabled": true, // 是否启用多OSS功能
+    "Description": "启用多OSS功能后,系统将支持多个存储提供者,可以通过BucketName或ProviderId指定使用哪个存储提供者"
   }
 }

+ 121 - 0
Admin.NET/Admin.NET.Core/Entity/SysFileProvider.cs

@@ -0,0 +1,121 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Newtonsoft.Json;
+using static Microsoft.ApplicationInsights.MetricDimensionNames.TelemetryContext;
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 系统文件存储提供者表
+/// </summary>
+[SugarTable(null, "系统文件存储提供者表")]
+[SysTable]
+[SugarIndex("index_{table}_BucketName", nameof(BucketName), OrderByType.Asc)]
+[SugarIndex("index_{table}_IsEnable", nameof(IsEnable), OrderByType.Desc)]
+[SugarIndex("index_{table}_IsDefault", nameof(IsDefault), OrderByType.Desc)]
+public partial class SysFileProvider : EntityBaseTenant
+{
+    /// <summary>
+    /// 存储提供者(Minio, QCloud,Aliyun 等等)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "存储提供者", Length = 16)]
+    [Required, MaxLength(16)]
+    public virtual string Provider { get; set; }
+
+    /// <summary>
+    /// 存储桶名称
+    /// </summary>
+    [SugarColumn(ColumnDescription = "存储桶名称", Length = 32)]
+    [Required, MaxLength(32)]
+    public virtual string BucketName { get; set; }
+
+
+    /// <summary>
+    /// 访问密钥 (填入 阿里云(Aliyun)/Minio:的 AccessKey,腾讯云(QCloud): 的 SecretId)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "访问密钥", Length = 128)]
+    [MaxLength(128)]
+    public virtual string? AccessKey { get; set; }
+
+  
+    /// <summary>
+    /// 密钥
+    /// </summary>
+    [SugarColumn(ColumnDescription = "密钥", Length = 128)]
+    [MaxLength(128)]
+    public virtual string? SecretKey { get; set; }
+
+    /// <summary>
+    /// 地域
+    /// </summary>
+    [SugarColumn(ColumnDescription = "地域", Length = 64)]
+    [MaxLength(64)]
+    public virtual string? Region { get; set; }
+
+    /// <summary>
+    /// 端点地址(填入 阿里云(Aliyun)/Minio:的 endpoint/Api address,腾讯云(QCloud): 的 AppId)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "端点地址", Length = 256)]
+    [MaxLength(256)]
+    public virtual string? Endpoint { get; set; }
+
+    /// <summary>
+    /// 是否启用HTTPS
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否启用HTTPS")]
+    public virtual bool? IsEnableHttps { get; set; } = true;
+
+    /// <summary>
+    /// 是否启用缓存
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否启用缓存")]
+    public virtual bool? IsEnableCache { get; set; } = true;
+
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否启用")]
+    public virtual bool? IsEnable { get; set; } = true;
+
+    /// <summary>
+    /// 是否默认提供者
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否默认提供者")]
+    public virtual bool? IsDefault { get; set; } = false;
+
+    /// <summary>
+    /// 自定义域名
+    /// </summary>
+    [SugarColumn(ColumnDescription = "自定义域名", Length = 256)]
+    [MaxLength(256)]
+    public virtual string? SinceDomain { get; set; }
+
+    /// <summary>
+    /// 排序号
+    /// </summary>
+    [SugarColumn(ColumnDescription = "排序号")]
+    public virtual int? OrderNo { get; set; } = 100;
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    [SugarColumn(ColumnDescription = "备注", Length = 512)]
+    [MaxLength(512)]
+    public virtual string? Remark { get; set; }
+
+    /// <summary>
+    /// 获取显示名称
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public virtual string DisplayName => $"{Provider}-{BucketName}";
+
+    /// <summary>
+    /// 获取配置键名
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public virtual string ConfigKey => $"{Provider}_{BucketName}_{Id}";
+}

+ 17 - 2
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -194,6 +194,11 @@ public class Startup : AppStartup
         var ossOpt = App.GetConfig<OSSProviderOptions>("OSSProvider", true);
         services.AddOSSService(Enum.GetName(ossOpt.Provider), "OSSProvider");
 
+        // 文件存储服务
+        services.AddTransient<SysFileProviderService>();
+        services.AddSingleton<IOSSServiceManager, OSSServiceManager>(); // 改为单例以保持缓存
+        services.AddTransient<MultiOSSFileProvider>();
+
         // 模板引擎
         services.AddViewEngine();
 
@@ -223,7 +228,15 @@ public class Startup : AppStartup
                 Type = "string",
                 Format = "date-time",
                 Example = new Microsoft.OpenApi.Any.OpenApiString(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) // 示例值
-            }); 
+            });
+
+            // 确保生成的文档包含 OpenAPI 版本字段
+            c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
+            {
+                Version = "v1",
+                Title = "Admin.NET API",
+                Description = "Admin.NET 通用权限开发平台"
+            });
         });
 
         // 将IP地址数据库文件完全加载到内存,提升查询速度(以空间换时间,内存将会增加60-70M)
@@ -364,7 +377,9 @@ public class Startup : AppStartup
             {
                 groupInfo.Description += "<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>";
             }
-            options.ConfigureSwagger(m => { m.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0; });
+            options.ConfigureSwagger(m => {
+                m.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
+            });
         });
 
 #if NET9_0_OR_GREATER