1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Minio;
- using OnceMi.AspNetCore.OSS;
- using ZhonTai.Admin.Core.Configs;
- using ZhonTai.Common.Helpers;
- using OSSOptions = ZhonTai.Admin.Core.Configs.OSSOptions;
- namespace ZhonTai.Admin.Core.Extensions;
- public static class ServiceCollectionExtensions
- {
- private static void CreateBucketName(IOSSServiceFactory oSSServiceFactory, OSSOptions oSSOptions)
- {
- var oSSService = oSSServiceFactory.Create(oSSOptions.Provider.ToString());
- if (!oSSService.BucketExistsAsync(oSSOptions.BucketName).Result)
- {
- oSSService.CreateBucketAsync(oSSOptions.BucketName).Wait();
- }
-
- if (oSSOptions.Provider == OSSProvider.Minio)
- {
- var bucketName = oSSOptions.BucketName;
- var minioClient = new MinioClient()
- .WithEndpoint(oSSOptions.Endpoint)
- .WithCredentials(oSSOptions.AccessKey, oSSOptions.SecretKey);
- if (oSSOptions.Region.NotNull())
- {
- minioClient.WithRegion(oSSOptions.Region);
- }
- minioClient = minioClient.Build();
-
-
-
- var policy = $@"{{""Version"":""2012-10-17"",""Statement"":[{{""Effect"":""Allow"",""Principal"":{{""AWS"":[""*""]}},""Action"":[""s3:GetBucketLocation""],""Resource"":[""arn:aws:s3:::{bucketName}""]}},{{""Effect"":""Allow"",""Principal"":{{""AWS"":[""*""]}},""Action"":[""s3:GetObject""],""Resource"":[""arn:aws:s3:::{bucketName}/*.*""]}}]}}";
- var setPolicyArgs = new SetPolicyArgs().WithBucket(bucketName).WithPolicy(policy);
- minioClient.SetPolicyAsync(setPolicyArgs).Wait();
- }
- }
- public static IServiceCollection AddOSS(this IServiceCollection services)
- {
- var env = services.BuildServiceProvider().GetRequiredService<IWebHostEnvironment>();
- var oSSConfigRoot = ConfigHelper.Load("ossconfig", env.EnvironmentName, true);
- services.Configure<OSSConfig>(oSSConfigRoot);
- var oSSConfig = oSSConfigRoot.Get<OSSConfig>();
- if (oSSConfig.OSSConfigs?.Count > 0)
- {
- foreach (var oSSOptions in oSSConfig.OSSConfigs)
- {
- if (oSSOptions.Enable)
- {
- services.AddOSSService(oSSOptions.Provider.ToString(), option =>
- {
- option.Provider = oSSOptions.Provider;
- option.Endpoint = oSSOptions.Endpoint;
- option.Region = oSSOptions.Region;
- option.AccessKey = oSSOptions.AccessKey;
- option.SecretKey = oSSOptions.SecretKey;
- option.IsEnableHttps = oSSOptions.IsEnableHttps;
- option.IsEnableCache = oSSOptions.IsEnableCache;
- });
- var oSSServiceFactory = services.BuildServiceProvider().GetRequiredService<IOSSServiceFactory>();
- CreateBucketName(oSSServiceFactory, oSSOptions);
- }
- }
- }
- return services;
- }
- }
|