diff --git a/IRaCIS.Core.API/Controllers/ExtraController.cs b/IRaCIS.Core.API/Controllers/ExtraController.cs index 66ef3bc6d..cf591fc64 100644 --- a/IRaCIS.Core.API/Controllers/ExtraController.cs +++ b/IRaCIS.Core.API/Controllers/ExtraController.cs @@ -25,6 +25,7 @@ using Microsoft.Extensions.Options; using Org.BouncyCastle.Tls; using RestSharp; using RestSharp.Authenticators; +using Serilog; using System; using System.Collections.Generic; using System.Globalization; @@ -137,10 +138,15 @@ namespace IRaCIS.Api.Controllers public async Task GetObjectStoreTokenAsync([FromServices] IOptionsMonitor options, [FromServices] IOSSService _oSSService) { - var result = _oSSService.GetObjectStoreTempToken(); + var domain = HttpContext.Request.Host.Host; + + + var result = _oSSService.GetObjectStoreTempToken(domain); //result.AWS = await GetAWSTemToken(options.CurrentValue); + Log.Logger.Information($"使用域名:{domain}请求token.返回{result.ToJsonStr()}"); + return ResponseOutput.Ok(result); } diff --git a/IRaCIS.Core.API/appsettings.Test_IRC.json b/IRaCIS.Core.API/appsettings.Test_IRC.json index d4cce6913..242e40ac2 100644 --- a/IRaCIS.Core.API/appsettings.Test_IRC.json +++ b/IRaCIS.Core.API/appsettings.Test_IRC.json @@ -28,6 +28,19 @@ "ObjectStoreService": { // 使用的对象存储服务类型 "ObjectStoreUse": "AliyunOSS", + "IsOpenStoreSync": false, + "SyncConfigList": [ + { + "Domain": "ir.test.extimaging.com", + "Primary": "AliyunOSS", + "Target": "AWS" + }, + { + "Domain": "lili.test.extimaging.com", + "Primary": "AWS", + "Target": "AliyunOSS" + } + ], // 阿里云对象存储服务的配置 "AliyunOSS": { // 阿里云 OSS 的 Region ID diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index c59668472..572a5e9b5 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -16,6 +16,7 @@ using Minio; using Minio.DataModel; using Minio.DataModel.Args; using Minio.Exceptions; +using Serilog.Parsing; using System.IO; using System.Reactive.Linq; using System.Runtime.InteropServices; @@ -82,7 +83,7 @@ public class ObjectStoreServiceOptions public bool IsOpenStoreSync { get; set; } - public List SyncConfigList { get; set; } + public List SyncConfigList { get; set; } = new List(); } @@ -107,6 +108,10 @@ public class ObjectStoreDTO public AWSTempToken AWS { get; set; } + public bool IsOpenStoreSync { get; set; } + + public List SyncConfigList { get; set; } + } [LowerCamelCaseJson] @@ -178,7 +183,7 @@ public interface IOSSService List GetRootFolderNames(); - public ObjectStoreDTO GetObjectStoreTempToken(); + public ObjectStoreDTO GetObjectStoreTempToken(string? domain = null); public Task MoveObject(string sourcePath, string destPath, bool overwrite = true); @@ -1769,13 +1774,26 @@ public class OSSService : IOSSService - public ObjectStoreDTO GetObjectStoreTempToken() + public ObjectStoreDTO GetObjectStoreTempToken(string? domain = null) { + //如果传递了域名,并且打开了存储同步,根据域名使用的具体存储覆盖之前的配置,否则就用固定的配置 + if (ObjectStoreServiceOptions.IsOpenStoreSync && domain.IsNotNullOrEmpty()) + { + var userDomain = domain?.Trim(); - var ossOptions = ObjectStoreServiceOptions.AliyunOSS; + var find = ObjectStoreServiceOptions.SyncConfigList.FirstOrDefault(t => t.Domain == userDomain); + if (find != null) + { + ObjectStoreServiceOptions.ObjectStoreUse = find.Primary; + } + } + + var objectStoreDTO = new ObjectStoreDTO() { ObjectStoreUse= ObjectStoreServiceOptions.ObjectStoreUse, IsOpenStoreSync = ObjectStoreServiceOptions.IsOpenStoreSync ,SyncConfigList= ObjectStoreServiceOptions .SyncConfigList}; if (ObjectStoreServiceOptions.ObjectStoreUse == "AliyunOSS") { + var ossOptions = ObjectStoreServiceOptions.AliyunOSS; + var client = new Client(new AlibabaCloud.OpenApiClient.Models.Config() { AccessKeyId = ossOptions.AccessKeyId, @@ -1817,11 +1835,12 @@ public class OSSService : IOSSService AliyunOSSTempToken = tempToken; - return new ObjectStoreDTO() { ObjectStoreUse = ObjectStoreServiceOptions.ObjectStoreUse, AliyunOSS = tempToken }; + objectStoreDTO.AliyunOSS = tempToken; + } else if (ObjectStoreServiceOptions.ObjectStoreUse == "MinIO") { - return new ObjectStoreDTO() { ObjectStoreUse = ObjectStoreServiceOptions.ObjectStoreUse, MinIO = ObjectStoreServiceOptions.MinIO }; + objectStoreDTO.MinIO = ObjectStoreServiceOptions.MinIO; } else if (ObjectStoreServiceOptions.ObjectStoreUse == "AWS") { @@ -1865,12 +1884,15 @@ public class OSSService : IOSSService }; AWSTempToken = tempToken; - return new ObjectStoreDTO() { ObjectStoreUse = ObjectStoreServiceOptions.ObjectStoreUse, AWS = tempToken }; + + objectStoreDTO.AWS = tempToken; } else { throw new BusinessValidationFailedException("未定义的存储介质类型"); } + + return objectStoreDTO; } } diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 570542f67..684c7a1f5 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -16922,17 +16922,17 @@ - ���� + 质疑 - һ���Ժ˲� + 一致性核查 - ���� + 复制