对接MinIO
continuous-integration/drone/push Build is passing

This commit is contained in:
2023-11-17 17:55:19 +08:00
parent 2ce78f333b
commit 55b72a9156
6 changed files with 161 additions and 21 deletions
+58 -2
View File
@@ -206,9 +206,65 @@ namespace IRaCIS.Api.Controllers
return ResponseOutput.Ok("/showdicom?studyId=f7b67793-8155-0223-2f15-118f2642efb8&type=Share&token=" + token);
}
[HttpGet("user/GetObjectStoreToken")]
public IResponseOutput GetObjectStoreToken([FromServices] IOptionsMonitor<ObjectStoreServiceOptions> options)
{
var serviceOption = options.CurrentValue;
[HttpGet("user/GenerateSTS")]
public IResponseOutput GenerateSTS([FromServices]IOptionsMonitor<AliyunOssOptions> options )
if (Enum.TryParse<ObjectStoreUse>(serviceOption.ObjectStoreUse, out var parsedEnum) && parsedEnum == ObjectStoreUse.AliyunOSS)
{
var ossOptions = serviceOption.AliyunOSS;
IClientProfile profile = DefaultProfile.GetProfile(ossOptions.RegionId, ossOptions.AccessKeyId, ossOptions.AccessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
// 创建一个STS请求
AssumeRoleRequest request = new AssumeRoleRequest
{
RoleArn = ossOptions.RoleArn, // 角色ARN,需要替换为你的角色ARN
RoleSessionName = $"session-name-{NewId.NextGuid()}", // 角色会话名称,可自定义
DurationSeconds = 900, // 令牌有效期(单位:秒),这里设置为1小时
};
AssumeRoleResponse response = client.GetAcsResponse(request);
// 返回STS令牌信息给前端
var stsToken = new ObjectStoreDTO()
{
ObjectStoreUse=serviceOption.ObjectStoreUse,
AliyunOSS=new AliyunOSSTempToken()
{
AccessKeyId = response.Credentials.AccessKeyId,
AccessKeySecret = response.Credentials.AccessKeySecret,
SecurityToken = response.Credentials.SecurityToken,
Expiration = response.Credentials.Expiration,
Region = ossOptions.Region,
BucketName = ossOptions.BucketName,
ViewEndpoint = ossOptions.ViewEndpoint,
},
MinIO=serviceOption.MinIO
}
;
return ResponseOutput.Ok(stsToken);
}
else if(Enum.TryParse<ObjectStoreUse>(serviceOption.ObjectStoreUse, out var parsedValue) && parsedValue == ObjectStoreUse.MinIO)
{
return ResponseOutput.Ok(new ObjectStoreDTO() { ObjectStoreUse=serviceOption.ObjectStoreUse,MinIO=serviceOption.MinIO});
}
else
{
return ResponseOutput.Ok(new ObjectStoreDTO() { ObjectStoreUse = serviceOption.ObjectStoreUse, MinIO = serviceOption.MinIO });
}
}
[HttpGet("user/GenerateSTS")]
public IResponseOutput GenerateSTS([FromServices]IOptionsMonitor<AliyunOSSOptions> options )
{
var ossOptions = options.CurrentValue;
+2 -1
View File
@@ -93,7 +93,8 @@ namespace IRaCIS.Core.API
services.AddOptions().Configure<SystemEmailSendConfig>( _configuration.GetSection("SystemEmailSendConfig"));
services.AddOptions().Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
services.AddOptions().Configure<AliyunOssOptions>(_configuration.GetSection("AliyunOSS"));
services.AddOptions().Configure<AliyunOSSOptions>(_configuration.GetSection("AliyunOSS"));
services.AddOptions().Configure<ObjectStoreServiceOptions>(_configuration.GetSection("ObjectStoreService"));
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
@@ -12,6 +12,31 @@
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"RegionId": "cn-shanghai",
"Endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"AccessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"AccessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"BucketName": "zyypacs",
"RoleArn": "acs:ram::1899121822495495:role/oss-upload",
"ViewEndpoint": "https://zyypacs.oss-cn-shanghai.aliyuncs.com",
"Region": "oss-cn-shanghai"
},
"MinIO": {
"Endpoint": "http://192.168.3.68",
"Port": "8001",
"UseSSL": false,
"AccessKey": "IDFkwEpWej0b4DtiuThL",
"SecretKey": "Lhuu83yMhVwu7c1SnjvGY6lq74jzpYqifK6Qtj4h",
"BucketName": "test"
}
},
"AliyunOSS": {
"RegionId": "cn-shanghai",
"Endpoint": "https://oss-cn-shanghai.aliyuncs.com",