| 
					
				 | 
			
			
				@@ -0,0 +1,76 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置Minio存储桶权限 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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 = minioClient.GetPolicyAsync(new GetPolicyArgs().WithBucket(bucketName)).Result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //设置存储桶权限,存储桶内的所有文件可以通过链接永久访问 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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.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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |