Browse Source

feat(oss-management): extract OSS stream processing to the basic module

pull/1023/head
colin 1 year ago
parent
commit
5d0d676537
  1. 46
      aspnet-core/LINGYUN.MicroService.All.sln
  2. 24
      aspnet-core/LINGYUN.MicroService.SingleProject.sln
  3. 35
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs
  4. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainerFactory.cs
  5. 12
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptions.cs
  6. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptionsExtensions.cs
  7. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectProcesserContributor.cs
  8. 13
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NoneOssObjectProcesser.cs
  9. 68
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs
  10. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectProcesserContext.cs
  11. 31
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/ByteExtensions.cs
  12. 31
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/StringArrayArgsExtensions.cs
  13. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN/Abp/OssManagement/FileSystem/ImageSharp/AbpOssManagementFileSystemImageSharpModule.cs
  14. 12
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/LIINGYUN/Abp/OssManagement/FileSystem/Imaging/ImageSharp/AbpOssManagementFileSystemImagingImageSharpModule.cs
  15. 62
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs
  16. 24
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainerFactory.cs
  17. 18
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssOptions.cs
  18. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssOptionsExtensions.cs
  19. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/IFileSystemOssObjectProcesserContributor.cs
  20. 13
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/NoneFileSystemOssObjectProcesser.cs
  21. 0
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xml
  22. 0
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xsd
  23. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN.Abp.OssManagement.ImageSharp.csproj
  24. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/AbpOssManagementImageSharpModule.cs
  25. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/ImageSharpOssObjectProcesser.cs
  26. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.md
  27. 0
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/FodyWeavers.xml
  28. 0
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/FodyWeavers.xsd
  29. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/LINGYUN.Abp.OssManagement.Imaging.ImageSharp.csproj
  30. 11
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/LINGYUN/Abp/OssManagement/Imaging/ImageSharp/AbpOssManagementImagingImageSharpModule.cs
  31. 0
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xml
  32. 0
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xsd
  33. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN.Abp.OssManagement.Imaging.csproj
  34. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpImagingProcesserContributor.cs
  35. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpOssManagementImagingModule.cs
  36. 224
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs
  37. 17
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainerFactory.cs
  38. 143
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs
  39. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainerFactory.cs
  40. 155
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs
  41. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainerFactory.cs
  42. 9
      aspnet-core/modules/oss-management/README.md
  43. 4
      aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj
  44. 1
      aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.Configure.cs
  45. 9
      aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs

46
aspnet-core/LINGYUN.MicroService.All.sln

@ -198,8 +198,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.A
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{D5036D3F-1C53-47EE-BA50-AD290AE062D7}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{D5036D3F-1C53-47EE-BA50-AD290AE062D7}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj", "{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{BD74BE00-54E4-4979-8797-E8027695F396}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{BD74BE00-54E4-4979-8797-E8027695F396}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Client", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis.Client\LINGYUN.Abp.Features.LimitValidation.Redis.Client.csproj", "{48DE251A-3482-4934-BC26-F99D2235AC9F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Client", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis.Client\LINGYUN.Abp.Features.LimitValidation.Redis.Client.csproj", "{48DE251A-3482-4934-BC26-F99D2235AC9F}"
@ -616,10 +614,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cli", "cli", "{59627844-A66
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Cli", "framework\cli\LINGYUN.Abp.Cli\LINGYUN.Abp.Cli.csproj", "{2F49E870-DAE2-4D89-98CA-46BBD91C68E2}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Cli", "framework\cli\LINGYUN.Abp.Cli\LINGYUN.Abp.Cli.csproj", "{2F49E870-DAE2-4D89-98CA-46BBD91C68E2}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem.Imaging", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem.Imaging\LINGYUN.Abp.OssManagement.FileSystem.Imaging.csproj", "{6C8489F4-68B5-4CBC-8463-010C71C23245}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp\LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp.csproj", "{5177C729-7666-4A6C-9D54-D7E5DEF0E857}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work", "framework\wechat\LINGYUN.Abp.WeChat.Work\LINGYUN.Abp.WeChat.Work.csproj", "{E4CEED06-B8E9-41FA-82BF-5401AE101C4B}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work", "framework\wechat\LINGYUN.Abp.WeChat.Work\LINGYUN.Abp.WeChat.Work.csproj", "{E4CEED06-B8E9-41FA-82BF-5401AE101C4B}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Tests", "tests\LINGYUN.Abp.WeChat.Work.Tests\LINGYUN.Abp.WeChat.Work.Tests.csproj", "{9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Tests", "tests\LINGYUN.Abp.WeChat.Work.Tests\LINGYUN.Abp.WeChat.Work.Tests.csproj", "{9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}"
@ -764,9 +758,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio", "modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj", "{EB9F1905-1798-4766-8347-A8D2A9DBFAED}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio", "modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj", "{EB9F1905-1798-4766-8347-A8D2A9DBFAED}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.Minio.Tests", "tests\LINGYUN.Abp.OssManagement.Minio.Tests\LINGYUN.Abp.OssManagement.Minio.Tests.csproj", "{CCE5C620-E17A-4EB1-A17A-9F90311B197D}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio.Tests", "tests\LINGYUN.Abp.OssManagement.Minio.Tests\LINGYUN.Abp.OssManagement.Minio.Tests.csproj", "{CCE5C620-E17A-4EB1-A17A-9F90311B197D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Tests", "tests\LINGYUN.Abp.OssManagement.Domain.Tests\LINGYUN.Abp.OssManagement.Domain.Tests.csproj", "{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.ImageSharp\LINGYUN.Abp.OssManagement.ImageSharp.csproj", "{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.Imaging", "modules\oss-management\LINGYUN.Abp.OssManagement.Imaging\LINGYUN.Abp.OssManagement.Imaging.csproj", "{267933BD-BFB8-4906-BA39-DF193B2FD558}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.Domain.Tests", "tests\LINGYUN.Abp.OssManagement.Domain.Tests\LINGYUN.Abp.OssManagement.Domain.Tests.csproj", "{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.Imaging.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.Imaging.ImageSharp\LINGYUN.Abp.OssManagement.Imaging.ImageSharp.csproj", "{220D3C8D-B117-4319-A911-1D7F53AFE8DB}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -1066,10 +1066,6 @@ Global
{D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.Build.0 = Debug|Any CPU {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.ActiveCfg = Release|Any CPU {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.Build.0 = Release|Any CPU {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.Build.0 = Release|Any CPU
{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Release|Any CPU.Build.0 = Release|Any CPU
{BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.Build.0 = Debug|Any CPU {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -1714,14 +1710,6 @@ Global
{2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Debug|Any CPU.Build.0 = Debug|Any CPU {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.Build.0 = Release|Any CPU {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.Build.0 = Release|Any CPU
{6C8489F4-68B5-4CBC-8463-010C71C23245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C8489F4-68B5-4CBC-8463-010C71C23245}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C8489F4-68B5-4CBC-8463-010C71C23245}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C8489F4-68B5-4CBC-8463-010C71C23245}.Release|Any CPU.Build.0 = Release|Any CPU
{5177C729-7666-4A6C-9D54-D7E5DEF0E857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5177C729-7666-4A6C-9D54-D7E5DEF0E857}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5177C729-7666-4A6C-9D54-D7E5DEF0E857}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5177C729-7666-4A6C-9D54-D7E5DEF0E857}.Release|Any CPU.Build.0 = Release|Any CPU
{E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.Build.0 = Debug|Any CPU {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Release|Any CPU.ActiveCfg = Release|Any CPU {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -1970,6 +1958,18 @@ Global
{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.Build.0 = Release|Any CPU {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.Build.0 = Release|Any CPU
{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Debug|Any CPU.Build.0 = Debug|Any CPU
{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Release|Any CPU.ActiveCfg = Release|Any CPU
{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Release|Any CPU.Build.0 = Release|Any CPU
{267933BD-BFB8-4906-BA39-DF193B2FD558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{267933BD-BFB8-4906-BA39-DF193B2FD558}.Debug|Any CPU.Build.0 = Debug|Any CPU
{267933BD-BFB8-4906-BA39-DF193B2FD558}.Release|Any CPU.ActiveCfg = Release|Any CPU
{267933BD-BFB8-4906-BA39-DF193B2FD558}.Release|Any CPU.Build.0 = Release|Any CPU
{220D3C8D-B117-4319-A911-1D7F53AFE8DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{220D3C8D-B117-4319-A911-1D7F53AFE8DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{220D3C8D-B117-4319-A911-1D7F53AFE8DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{220D3C8D-B117-4319-A911-1D7F53AFE8DB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -2068,7 +2068,6 @@ Global
{B86EBB6F-A27F-4277-8265-937951A9DCB0} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} {B86EBB6F-A27F-4277-8265-937951A9DCB0} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
{35B17218-9FB6-439E-AF73-9A1454BC923C} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} {35B17218-9FB6-439E-AF73-9A1454BC923C} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{D5036D3F-1C53-47EE-BA50-AD290AE062D7} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} {D5036D3F-1C53-47EE-BA50-AD290AE062D7} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{BD74BE00-54E4-4979-8797-E8027695F396} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} {BD74BE00-54E4-4979-8797-E8027695F396} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{48DE251A-3482-4934-BC26-F99D2235AC9F} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} {48DE251A-3482-4934-BC26-F99D2235AC9F} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}
{94B47385-E47F-4FD7-A3A9-A7AA122EFC93} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} {94B47385-E47F-4FD7-A3A9-A7AA122EFC93} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
@ -2266,8 +2265,6 @@ Global
{1D420BA6-2155-4E0D-AAAF-EECC0330A38C} = {DD1B10ED-73E2-41BE-928A-46501050FE2A} {1D420BA6-2155-4E0D-AAAF-EECC0330A38C} = {DD1B10ED-73E2-41BE-928A-46501050FE2A}
{59627844-A66A-46AC-B882-E8F302D0EC24} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} {59627844-A66A-46AC-B882-E8F302D0EC24} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
{2F49E870-DAE2-4D89-98CA-46BBD91C68E2} = {59627844-A66A-46AC-B882-E8F302D0EC24} {2F49E870-DAE2-4D89-98CA-46BBD91C68E2} = {59627844-A66A-46AC-B882-E8F302D0EC24}
{6C8489F4-68B5-4CBC-8463-010C71C23245} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{5177C729-7666-4A6C-9D54-D7E5DEF0E857} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{E4CEED06-B8E9-41FA-82BF-5401AE101C4B} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} {E4CEED06-B8E9-41FA-82BF-5401AE101C4B} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
{9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
{B4C8056F-7325-4DB1-9F09-A6F37B052192} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} {B4C8056F-7325-4DB1-9F09-A6F37B052192} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
@ -2341,6 +2338,9 @@ Global
{EB9F1905-1798-4766-8347-A8D2A9DBFAED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} {EB9F1905-1798-4766-8347-A8D2A9DBFAED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{CCE5C620-E17A-4EB1-A17A-9F90311B197D} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} {CCE5C620-E17A-4EB1-A17A-9F90311B197D} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{267933BD-BFB8-4906-BA39-DF193B2FD558} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
{220D3C8D-B117-4319-A911-1D7F53AFE8DB} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718} SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718}

24
aspnet-core/LINGYUN.MicroService.SingleProject.sln

@ -228,6 +228,9 @@ EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.HttpApi", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi\LINGYUN.Abp.TaskManagement.HttpApi.csproj", "{3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.HttpApi", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi\LINGYUN.Abp.TaskManagement.HttpApi.csproj", "{3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{3AD66E47-B667-40D1-AE61-F5EC186241F7}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{3AD66E47-B667-40D1-AE61-F5EC186241F7}"
ProjectSection(SolutionItems) = preProject
modules\oss-management\README.md = modules\oss-management\README.md
EndProjectSection
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{AD3E63A3-3422-4A1A-AC89-B20786A5323E}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{AD3E63A3-3422-4A1A-AC89-B20786A5323E}"
EndProject EndProject
@ -235,8 +238,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.D
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj", "{72410751-25FF-4B13-9D80-97F021716662}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{34C9609F-556B-44D7-B3DE-5637FEB0BFEC}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{34C9609F-556B-44D7-B3DE-5637FEB0BFEC}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{A69E6742-39A6-4C0D-A098-E16A653331AC}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{A69E6742-39A6-4C0D-A098-E16A653331AC}"
@ -599,6 +600,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Exporter.Magico
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio", "modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj", "{9AE3E97E-8846-4315-9546-FF97E97FD49F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio", "modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj", "{9AE3E97E-8846-4315-9546-FF97E97FD49F}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Imaging", "modules\oss-management\LINGYUN.Abp.OssManagement.Imaging\LINGYUN.Abp.OssManagement.Imaging.csproj", "{BC7A8662-4313-4F1D-B267-9B1B69444CD3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Imaging.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.Imaging.ImageSharp\LINGYUN.Abp.OssManagement.Imaging.ImageSharp.csproj", "{5325AA6E-FB76-46D2-B1C8-BAAAE15E42F3}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -977,10 +982,6 @@ Global
{90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Debug|Any CPU.Build.0 = Debug|Any CPU {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Release|Any CPU.ActiveCfg = Release|Any CPU {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Release|Any CPU.Build.0 = Release|Any CPU {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Release|Any CPU.Build.0 = Release|Any CPU
{72410751-25FF-4B13-9D80-97F021716662}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72410751-25FF-4B13-9D80-97F021716662}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72410751-25FF-4B13-9D80-97F021716662}.Release|Any CPU.ActiveCfg = Release|Any CPU
{72410751-25FF-4B13-9D80-97F021716662}.Release|Any CPU.Build.0 = Release|Any CPU
{34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU {34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU {34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -1581,6 +1582,14 @@ Global
{9AE3E97E-8846-4315-9546-FF97E97FD49F}.Debug|Any CPU.Build.0 = Debug|Any CPU {9AE3E97E-8846-4315-9546-FF97E97FD49F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9AE3E97E-8846-4315-9546-FF97E97FD49F}.Release|Any CPU.ActiveCfg = Release|Any CPU {9AE3E97E-8846-4315-9546-FF97E97FD49F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9AE3E97E-8846-4315-9546-FF97E97FD49F}.Release|Any CPU.Build.0 = Release|Any CPU {9AE3E97E-8846-4315-9546-FF97E97FD49F}.Release|Any CPU.Build.0 = Release|Any CPU
{BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Release|Any CPU.Build.0 = Release|Any CPU
{5325AA6E-FB76-46D2-B1C8-BAAAE15E42F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5325AA6E-FB76-46D2-B1C8-BAAAE15E42F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5325AA6E-FB76-46D2-B1C8-BAAAE15E42F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5325AA6E-FB76-46D2-B1C8-BAAAE15E42F3}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -1697,7 +1706,6 @@ Global
{AD3E63A3-3422-4A1A-AC89-B20786A5323E} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {AD3E63A3-3422-4A1A-AC89-B20786A5323E} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{CA2975D9-5477-4281-8D84-F0909F22DFF3} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {CA2975D9-5477-4281-8D84-F0909F22DFF3} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{90F837CB-72DF-40B7-8DA0-6E568ECEEF0A} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{72410751-25FF-4B13-9D80-97F021716662} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{34C9609F-556B-44D7-B3DE-5637FEB0BFEC} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {34C9609F-556B-44D7-B3DE-5637FEB0BFEC} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{A69E6742-39A6-4C0D-A098-E16A653331AC} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {A69E6742-39A6-4C0D-A098-E16A653331AC} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{6AC4C18F-2BB5-47F9-99F5-5585E1D22111} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {6AC4C18F-2BB5-47F9-99F5-5585E1D22111} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
@ -1873,6 +1881,8 @@ Global
{CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69} = {4A2CF141-F32D-45A0-8665-B3705667A6D2} {CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69} = {4A2CF141-F32D-45A0-8665-B3705667A6D2}
{319428B9-CE7F-4027-92FA-6311C4CE95FB} = {4A2CF141-F32D-45A0-8665-B3705667A6D2} {319428B9-CE7F-4027-92FA-6311C4CE95FB} = {4A2CF141-F32D-45A0-8665-B3705667A6D2}
{9AE3E97E-8846-4315-9546-FF97E97FD49F} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} {9AE3E97E-8846-4315-9546-FF97E97FD49F} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{BC7A8662-4313-4F1D-B267-9B1B69444CD3} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
{5325AA6E-FB76-46D2-B1C8-BAAAE15E42F3} = {3AD66E47-B667-40D1-AE61-F5EC186241F7}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {711A43C0-A2F8-4E5C-9B9F-F2551E4B3FF1} SolutionGuid = {711A43C0-A2F8-4E5C-9B9F-F2551E4B3FF1}

35
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs

@ -1,5 +1,7 @@
using Aliyun.OSS; using Aliyun.OSS;
using LINGYUN.Abp.BlobStoring.Aliyun; using LINGYUN.Abp.BlobStoring.Aliyun;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -13,18 +15,21 @@ namespace LINGYUN.Abp.OssManagement.Aliyun;
/// <summary> /// <summary>
/// Oss容器的阿里云实现 /// Oss容器的阿里云实现
/// </summary> /// </summary>
internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor internal class AliyunOssContainer : OssContainerBase, IOssObjectExpireor
{ {
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected IOssClientFactory OssClientFactory { get; } protected IOssClientFactory OssClientFactory { get; }
public AliyunOssContainer( public AliyunOssContainer(
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IOssClientFactory ossClientFactory) IOssClientFactory ossClientFactory,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
: base(options, serviceScopeFactory)
{ {
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
OssClientFactory = ossClientFactory; OssClientFactory = ossClientFactory;
} }
public async virtual Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) public async override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -34,7 +39,7 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
ossClient.DeleteObjects(aliyunRequest); ossClient.DeleteObjects(aliyunRequest);
} }
public async virtual Task<OssContainer> CreateAsync(string name) public async override Task<OssContainer> CreateAsync(string name)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -57,7 +62,7 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
}); });
} }
public async virtual Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -125,7 +130,7 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
return ossObject; return ossObject;
} }
public async virtual Task DeleteAsync(string name) protected async override Task DeleteBucketAsync(string name)
{ {
// 阿里云oss在控制台设置即可,无需改变 // 阿里云oss在控制台设置即可,无需改变
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -166,7 +171,7 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public async virtual Task DeleteObjectAsync(GetOssObjectRequest request) public async override Task DeleteObjectAsync(GetOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -190,14 +195,14 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public async virtual Task<bool> ExistsAsync(string name) public async override Task<bool> ExistsAsync(string name)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
return BucketExists(ossClient, name); return BucketExists(ossClient, name);
} }
public async virtual Task<OssContainer> GetAsync(string name) public async override Task<OssContainer> GetAsync(string name)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, name)) if (!BucketExists(ossClient, name))
@ -219,7 +224,7 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
}); });
} }
public async virtual Task<OssObject> GetObjectAsync(GetOssObjectRequest request) protected async override Task<OssObject> GetOssObjectAsync(GetOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, request.Bucket)) if (!BucketExists(ossClient, request.Bucket))
@ -264,7 +269,7 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
return ossObject; return ossObject;
} }
public async virtual Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request) public async override Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -296,7 +301,7 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
.ToList()); .ToList());
} }
public async virtual Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request) public async override Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -400,4 +405,10 @@ internal class AliyunOssContainer : IOssContainer, IOssObjectExpireor
{ {
return await OssClientFactory.CreateAsync(); return await OssClientFactory.CreateAsync();
} }
protected override bool ShouldProcessObject(OssObject ossObject)
{
// 阿里云自行处理
return false;
}
} }

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainerFactory.cs

@ -1,4 +1,6 @@
using LINGYUN.Abp.BlobStoring.Aliyun; using LINGYUN.Abp.BlobStoring.Aliyun;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.OssManagement.Aliyun; namespace LINGYUN.Abp.OssManagement.Aliyun;
@ -7,11 +9,17 @@ public class AliyunOssContainerFactory : IOssContainerFactory
{ {
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected IOssClientFactory OssClientFactory { get; } protected IOssClientFactory OssClientFactory { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected IOptions<AbpOssManagementOptions> Options { get; }
public AliyunOssContainerFactory( public AliyunOssContainerFactory(
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IOssClientFactory ossClientFactory) IOssClientFactory ossClientFactory,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
{ {
Options = options;
ServiceScopeFactory = serviceScopeFactory;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
OssClientFactory = ossClientFactory; OssClientFactory = ossClientFactory;
} }
@ -20,6 +28,8 @@ public class AliyunOssContainerFactory : IOssContainerFactory
{ {
return new AliyunOssContainer( return new AliyunOssContainer(
CurrentTenant, CurrentTenant,
OssClientFactory); OssClientFactory,
ServiceScopeFactory,
Options);
} }
} }

12
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptions.cs

@ -1,4 +1,5 @@
using System; using JetBrains.Annotations;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Volo.Abp; using Volo.Abp;
@ -38,6 +39,11 @@ public class AbpOssManagementOptions
/// default: 30 minutes /// default: 30 minutes
/// </summary> /// </summary>
public TimeSpan MinimumTempLifeSpan { get; set; } public TimeSpan MinimumTempLifeSpan { get; set; }
/// <summary>
/// 文件流处理器
/// </summary>
[NotNull]
public List<IOssObjectProcesserContributor> Processers { get; }
public AbpOssManagementOptions() public AbpOssManagementOptions()
{ {
@ -56,6 +62,10 @@ public class AbpOssManagementOptions
// 缓存 // 缓存
"temp" "temp"
}; };
Processers = new List<IOssObjectProcesserContributor>
{
new NoneOssObjectProcesser()
};
IsCleanupEnabled = true; IsCleanupEnabled = true;
CleanupPeriod = 3_600_000; CleanupPeriod = 3_600_000;

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptionsExtensions.cs

@ -0,0 +1,14 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement;
public static class AbpOssManagementOptionsExtensions
{
public static void AddProcesser<TProcesserContributor>(
this AbpOssManagementOptions options,
TProcesserContributor contributor)
where TProcesserContributor : IOssObjectProcesserContributor
{
options.Processers.InsertBefore((x) => x is NoneOssObjectProcesser, contributor);
}
}

8
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectProcesserContributor.cs

@ -0,0 +1,8 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement;
public interface IOssObjectProcesserContributor
{
Task ProcessAsync(OssObjectProcesserContext context);
}

13
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NoneOssObjectProcesser.cs

@ -0,0 +1,13 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement;
public class NoneOssObjectProcesser : IOssObjectProcesserContributor
{
public Task ProcessAsync(OssObjectProcesserContext context)
{
context.SetContent(context.OssObject.Content);
return Task.CompletedTask;
}
}

68
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs

@ -0,0 +1,68 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Threading.Tasks;
using Volo.Abp;
namespace LINGYUN.Abp.OssManagement;
public abstract class OssContainerBase : IOssContainer
{
protected AbpOssManagementOptions Options { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected OssContainerBase(
IOptions<AbpOssManagementOptions> options,
IServiceScopeFactory serviceScopeFactory)
{
Options = options.Value;
ServiceScopeFactory = serviceScopeFactory;
}
public async virtual Task<OssObject> GetObjectAsync(GetOssObjectRequest request)
{
var ossObject = await GetOssObjectAsync(request);
if (ShouldProcessObject(ossObject) && !request.Process.IsNullOrWhiteSpace())
{
using var serviceScope = ServiceScopeFactory.CreateScope();
var context = new OssObjectProcesserContext(request.Process, ossObject, serviceScope.ServiceProvider);
foreach (var processer in Options.Processers)
{
await processer.ProcessAsync(context);
if (context.Handled)
{
ossObject.SetContent(context.Content);
break;
}
}
}
return ossObject;
}
public async virtual Task DeleteAsync(string name)
{
if (Options.CheckStaticBucket(name))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithStatic);
}
await DeleteBucketAsync(name);
}
public abstract Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request);
public abstract Task<OssContainer> CreateAsync(string name);
public abstract Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request);
public abstract Task DeleteObjectAsync(GetOssObjectRequest request);
public abstract Task<bool> ExistsAsync(string name);
public abstract Task<OssContainer> GetAsync(string name);
public abstract Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request);
public abstract Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request);
protected abstract Task DeleteBucketAsync(string name);
protected abstract Task<OssObject> GetOssObjectAsync(GetOssObjectRequest request);
protected virtual bool ShouldProcessObject(OssObject ossObject)
{
return true;
}
}

6
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssObjectContext.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectProcesserContext.cs

@ -2,9 +2,9 @@
using System.IO; using System.IO;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace LINGYUN.Abp.OssManagement.FileSystem; namespace LINGYUN.Abp.OssManagement;
public class FileSystemOssObjectContext : IServiceProviderAccessor public class OssObjectProcesserContext : IServiceProviderAccessor
{ {
public string Process { get; } public string Process { get; }
public OssObject OssObject { get; } public OssObject OssObject { get; }
@ -12,7 +12,7 @@ public class FileSystemOssObjectContext : IServiceProviderAccessor
public Stream Content { get; private set; } public Stream Content { get; private set; }
public IServiceProvider ServiceProvider { get; } public IServiceProvider ServiceProvider { get; }
public FileSystemOssObjectContext( public OssObjectProcesserContext(
string process, string process,
OssObject ossObject, OssObject ossObject,
IServiceProvider serviceProvider) IServiceProvider serviceProvider)

31
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/ByteExtensions.cs

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace System;
public static class ByteExtensions
{
private readonly static string[] ImageTypes = new string[]
{
"6677",// bmp
"7173",// gif
"13780",// png
"255216"// jpg
};
public static bool IsImage(this byte[] fileBytes)
{
if (fileBytes.IsNullOrEmpty())
{
return false;
}
string fileclass = "";
for (int i = 0; i < 2; i++)
{
fileclass += fileBytes[i].ToString();
}
return ImageTypes.Any(type => type.Equals(fileclass));
}
}

31
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/StringArrayArgsExtensions.cs

@ -0,0 +1,31 @@
using System.Linq;
namespace System;
public static class StringArrayArgsExtensions
{
public static string GetStringPrarm(this string[] args, string key)
{
if (!args.Any())
{
return null;
}
return args
.Where(arg => arg.StartsWith(key))
.Select(arg => arg.Substring(key.Length))
.FirstOrDefault();
}
public static string GetInt32Prarm(this string[] args, string key)
{
if (!args.Any())
{
return null;
}
return args
.Where(arg => arg.StartsWith(key))
.Select(arg => arg.Substring(key.Length))
.FirstOrDefault(arg => int.TryParse(arg, out _));
}
}

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN/Abp/OssManagement/FileSystem/ImageSharp/AbpOssManagementFileSystemImageSharpModule.cs

@ -1,15 +0,0 @@
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.OssManagement.FileSystem.ImageSharp;
[DependsOn(typeof(AbpOssManagementFileSystemModule))]
public class AbpOssManagementFileSystemImageSharpModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<FileSystemOssOptions>(options =>
{
options.AddProcesser(new ImageSharpProcesserContributor());
});
}
}

12
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/LIINGYUN/Abp/OssManagement/FileSystem/Imaging/ImageSharp/AbpOssManagementFileSystemImagingImageSharpModule.cs

@ -1,12 +0,0 @@
using LINGYUN.Abp.OssManagement.FileSystem.Imaging;
using Volo.Abp.Imaging;
using Volo.Abp.Modularity;
namespace LIINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp;
[DependsOn(
typeof(AbpImagingImageSharpModule),
typeof(AbpOssManagementFileSystemImagingModule))]
public class AbpOssManagementFileSystemImagingImageSharpModule : AbpModule
{
}

62
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs

@ -17,35 +17,29 @@ namespace LINGYUN.Abp.OssManagement.FileSystem;
/// <summary> /// <summary>
/// Oss容器的本地文件系统实现 /// Oss容器的本地文件系统实现
/// </summary> /// </summary>
internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor internal class FileSystemOssContainer : OssContainerBase, IOssObjectExpireor
{ {
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected IHostEnvironment Environment { get; } protected IHostEnvironment Environment { get; }
protected IBlobFilePathCalculator FilePathCalculator { get; } protected IBlobFilePathCalculator FilePathCalculator { get; }
protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } protected IBlobContainerConfigurationProvider ConfigurationProvider { get; }
protected IServiceProvider ServiceProvider { get; }
protected FileSystemOssOptions Options { get; }
protected AbpOssManagementOptions OssOptions { get; }
public FileSystemOssContainer( public FileSystemOssContainer(
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IHostEnvironment environment, IHostEnvironment environment,
IServiceProvider serviceProvider, IServiceScopeFactory serviceScopeFactory,
IBlobFilePathCalculator blobFilePathCalculator, IBlobFilePathCalculator blobFilePathCalculator,
IBlobContainerConfigurationProvider configurationProvider, IBlobContainerConfigurationProvider configurationProvider,
IOptions<FileSystemOssOptions> options,
IOptions<AbpOssManagementOptions> ossOptions) IOptions<AbpOssManagementOptions> ossOptions)
: base(ossOptions, serviceScopeFactory)
{ {
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
Environment = environment; Environment = environment;
ServiceProvider = serviceProvider;
FilePathCalculator = blobFilePathCalculator; FilePathCalculator = blobFilePathCalculator;
ConfigurationProvider = configurationProvider; ConfigurationProvider = configurationProvider;
Options = options.Value;
OssOptions = ossOptions.Value;
} }
public virtual Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) public override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request)
{ {
var objectPath = !request.Path.IsNullOrWhiteSpace() var objectPath = !request.Path.IsNullOrWhiteSpace()
? request.Path.EnsureEndsWith('/') ? request.Path.EnsureEndsWith('/')
@ -72,7 +66,7 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
return Task.CompletedTask; return Task.CompletedTask;
} }
public virtual Task<OssContainer> CreateAsync(string name) public override Task<OssContainer> CreateAsync(string name)
{ {
var filePath = CalculateFilePath(name); var filePath = CalculateFilePath(name);
ThrowOfPathHasTooLong(filePath); ThrowOfPathHasTooLong(filePath);
@ -128,7 +122,7 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
return Task.CompletedTask; return Task.CompletedTask;
} }
public async virtual Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var objectPath = !request.Path.IsNullOrWhiteSpace() var objectPath = !request.Path.IsNullOrWhiteSpace()
? request.Path.EnsureEndsWith('/') ? request.Path.EnsureEndsWith('/')
@ -213,10 +207,8 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public virtual Task DeleteAsync(string name) protected override Task DeleteBucketAsync(string name)
{ {
CheckStaticBucket(name);
var filePath = CalculateFilePath(name); var filePath = CalculateFilePath(name);
if (!Directory.Exists(filePath)) if (!Directory.Exists(filePath))
{ {
@ -233,7 +225,7 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
return Task.CompletedTask; return Task.CompletedTask;
} }
public virtual Task DeleteObjectAsync(GetOssObjectRequest request) public override Task DeleteObjectAsync(GetOssObjectRequest request)
{ {
var objectName = request.Path.IsNullOrWhiteSpace() var objectName = request.Path.IsNullOrWhiteSpace()
? request.Object ? request.Object
@ -255,14 +247,14 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
return Task.CompletedTask; return Task.CompletedTask;
} }
public virtual Task<bool> ExistsAsync(string name) public override Task<bool> ExistsAsync(string name)
{ {
var filePath = CalculateFilePath(name); var filePath = CalculateFilePath(name);
return Task.FromResult(Directory.Exists(filePath)); return Task.FromResult(Directory.Exists(filePath));
} }
public virtual Task<OssContainer> GetAsync(string name) public override Task<OssContainer> GetAsync(string name)
{ {
var filePath = CalculateFilePath(name); var filePath = CalculateFilePath(name);
if (!Directory.Exists(filePath)) if (!Directory.Exists(filePath))
@ -285,7 +277,7 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
return Task.FromResult(container); return Task.FromResult(container);
} }
public async virtual Task<OssObject> GetObjectAsync(GetOssObjectRequest request) protected override Task<OssObject> GetOssObjectAsync(GetOssObjectRequest request)
{ {
var objectPath = !request.Path.IsNullOrWhiteSpace() var objectPath = !request.Path.IsNullOrWhiteSpace()
? request.Path.EnsureEndsWith('/') ? request.Path.EnsureEndsWith('/')
@ -321,7 +313,7 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
{ {
FullName = directoryInfo.FullName.Replace(Environment.ContentRootPath, "") FullName = directoryInfo.FullName.Replace(Environment.ContentRootPath, "")
}; };
return ossObject; return Task.FromResult(ossObject);
} }
else else
{ {
@ -345,27 +337,11 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
ossObject.SetContent(fileStream); ossObject.SetContent(fileStream);
if (!request.Process.IsNullOrWhiteSpace()) return Task.FromResult(ossObject);
{
using var serviceScope = ServiceProvider.CreateScope();
var context = new FileSystemOssObjectContext(request.Process, ossObject, serviceScope.ServiceProvider);
foreach (var processer in Options.Processers)
{
await processer.ProcessAsync(context);
if (context.Handled)
{
ossObject.SetContent(context.Content);
break;
}
}
}
return ossObject;
} }
} }
public virtual Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request) public override Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{ {
// 不传递Bucket 检索根目录的Bucket // 不传递Bucket 检索根目录的Bucket
var filePath = CalculateFilePath(null); var filePath = CalculateFilePath(null);
@ -412,7 +388,7 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
return Task.FromResult(response); return Task.FromResult(response);
} }
public virtual Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request) public override Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{ {
// 先定位检索的目录 // 先定位检索的目录
var filePath = CalculateFilePath(request.BucketName, request.Prefix); var filePath = CalculateFilePath(request.BucketName, request.Prefix);
@ -572,14 +548,6 @@ internal class FileSystemOssContainer : IOssContainer, IOssObjectExpireor
return blobPath; return blobPath;
} }
protected virtual void CheckStaticBucket(string bucket)
{
if (OssOptions.CheckStaticBucket(bucket))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithStatic);
}
}
private void ThrowOfPathHasTooLong(string path) private void ThrowOfPathHasTooLong(string path)
{ {
// Windows 133 260 // Windows 133 260

24
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainerFactory.cs

@ -1,6 +1,6 @@
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using System;
using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring;
using Volo.Abp.BlobStoring.FileSystem; using Volo.Abp.BlobStoring.FileSystem;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -11,28 +11,25 @@ public class FileSystemOssContainerFactory : IOssContainerFactory
{ {
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected IHostEnvironment Environment { get; } protected IHostEnvironment Environment { get; }
protected IServiceProvider ServiceProvider { get; } protected IServiceScopeFactory ServiceScopeFactory { get; }
protected IBlobFilePathCalculator FilePathCalculator { get; } protected IBlobFilePathCalculator FilePathCalculator { get; }
protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } protected IBlobContainerConfigurationProvider ConfigurationProvider { get; }
protected IOptions<FileSystemOssOptions> Options { get; } protected IOptions<AbpOssManagementOptions> Options { get; }
protected IOptions<AbpOssManagementOptions> OssOptions { get; }
public FileSystemOssContainerFactory( public FileSystemOssContainerFactory(
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IHostEnvironment environment, IHostEnvironment environment,
IServiceProvider serviceProvider, IServiceScopeFactory serviceScopeFactory,
IBlobFilePathCalculator blobFilePathCalculator, IBlobFilePathCalculator blobFilePathCalculator,
IBlobContainerConfigurationProvider configurationProvider, IBlobContainerConfigurationProvider configurationProvider,
IOptions<FileSystemOssOptions> options, IOptions<AbpOssManagementOptions> options)
IOptions<AbpOssManagementOptions> ossOptions)
{ {
Options = options;
Environment = environment; Environment = environment;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
ServiceProvider = serviceProvider; ServiceScopeFactory = serviceScopeFactory;
FilePathCalculator = blobFilePathCalculator; FilePathCalculator = blobFilePathCalculator;
ConfigurationProvider = configurationProvider; ConfigurationProvider = configurationProvider;
Options = options;
OssOptions = ossOptions;
} }
public IOssContainer Create() public IOssContainer Create()
@ -40,10 +37,9 @@ public class FileSystemOssContainerFactory : IOssContainerFactory
return new FileSystemOssContainer( return new FileSystemOssContainer(
CurrentTenant, CurrentTenant,
Environment, Environment,
ServiceProvider, ServiceScopeFactory,
FilePathCalculator, FilePathCalculator,
ConfigurationProvider, ConfigurationProvider,
Options, Options);
OssOptions);
} }
} }

18
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssOptions.cs

@ -1,18 +0,0 @@
using JetBrains.Annotations;
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement.FileSystem;
public class FileSystemOssOptions
{
[NotNull]
public List<IFileSystemOssObjectProcesserContributor> Processers { get; }
public FileSystemOssOptions()
{
Processers = new List<IFileSystemOssObjectProcesserContributor>
{
new NoneFileSystemOssObjectProcesser()
};
}
}

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssOptionsExtensions.cs

@ -1,14 +0,0 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement.FileSystem;
public static class FileSystemOssOptionsExtensions
{
public static void AddProcesser<TProcesserContributor>(
this FileSystemOssOptions options,
TProcesserContributor contributor)
where TProcesserContributor : IFileSystemOssObjectProcesserContributor
{
options.Processers.InsertBefore((x) => x is NoneFileSystemOssObjectProcesser, contributor);
}
}

8
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/IFileSystemOssObjectProcesserContributor.cs

@ -1,8 +0,0 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement.FileSystem;
public interface IFileSystemOssObjectProcesserContributor
{
Task ProcessAsync(FileSystemOssObjectContext context);
}

13
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/NoneFileSystemOssObjectProcesser.cs

@ -1,13 +0,0 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement.FileSystem;
public class NoneFileSystemOssObjectProcesser : IFileSystemOssObjectProcesserContributor
{
public Task ProcessAsync(FileSystemOssObjectContext context)
{
context.SetContent(context.OssObject.Content);
return Task.CompletedTask;
}
}

0
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/FodyWeavers.xml → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xml

0
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/FodyWeavers.xsd → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xsd

6
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN.Abp.OssManagement.ImageSharp.csproj

@ -5,8 +5,8 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<AssemblyName>LINGYUN.Abp.OssManagement.FileSystem.ImageSharp</AssemblyName> <AssemblyName>LINGYUN.Abp.OssManagement.ImageSharp</AssemblyName>
<PackageId>LINGYUN.Abp.OssManagement.FileSystem.ImageSharp</PackageId> <PackageId>LINGYUN.Abp.OssManagement.ImageSharp</PackageId>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
@ -18,7 +18,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj" /> <ProjectReference Include="..\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/AbpOssManagementImageSharpModule.cs

@ -0,0 +1,15 @@
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.OssManagement.ImageSharp;
[DependsOn(typeof(AbpOssManagementDomainModule))]
public class AbpOssManagementImageSharpModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpOssManagementOptions>(options =>
{
options.AddProcesser(new ImageSharpOssObjectProcesser());
});
}
}

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN/Abp/OssManagement/FileSystem/ImageSharp/ImageSharpFileSystemOssObjectProcesser.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/ImageSharpOssObjectProcesser.cs

@ -1,20 +1,14 @@
using SixLabors.Fonts; using SixLabors.ImageSharp;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement.FileSystem.ImageSharp; namespace LINGYUN.Abp.OssManagement.ImageSharp;
public class ImageSharpProcesserContributor : IFileSystemOssObjectProcesserContributor public class ImageSharpOssObjectProcesser : IOssObjectProcesserContributor
{ {
public async virtual Task ProcessAsync(FileSystemOssObjectContext context) public async virtual Task ProcessAsync(OssObjectProcesserContext context)
{ {
var copyStream = context.OssObject.Content; var copyStream = context.OssObject.Content;
var bytes = await copyStream.GetAllBytesAsync(); var bytes = await copyStream.GetAllBytesAsync();

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.md → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.md

@ -1,6 +1,6 @@
# LINGYUN.Abp.OssManagement.FileSystem.ImageSharp # LINGYUN.Abp.OssManagement.ImageSharp
本地文件系统oss对象ImageSharp图形处理接口 oss对象ImageSharp图形处理接口
## 配置使用 ## 配置使用

0
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/FodyWeavers.xml → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/FodyWeavers.xml

0
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/FodyWeavers.xsd → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/FodyWeavers.xsd

8
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp.csproj → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/LINGYUN.Abp.OssManagement.Imaging.ImageSharp.csproj

@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" /> <Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" /> <Import Project="..\..\..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<AssemblyName>LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp</AssemblyName> <AssemblyName>LINGYUN.Abp.OssManagement.Imaging.ImageSharp</AssemblyName>
<PackageId>LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp</PackageId> <PackageId>LINGYUN.Abp.OssManagement.Imaging.ImageSharp</PackageId>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
@ -18,7 +18,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.FileSystem.Imaging\LINGYUN.Abp.OssManagement.FileSystem.Imaging.csproj" /> <ProjectReference Include="..\LINGYUN.Abp.OssManagement.Imaging\LINGYUN.Abp.OssManagement.Imaging.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

11
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging.ImageSharp/LINGYUN/Abp/OssManagement/Imaging/ImageSharp/AbpOssManagementImagingImageSharpModule.cs

@ -0,0 +1,11 @@
using Volo.Abp.Imaging;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.OssManagement.Imaging.ImageSharp;
[DependsOn(
typeof(AbpImagingImageSharpModule),
typeof(AbpOssManagementImagingModule))]
public class AbpOssManagementImagingImageSharpModule : AbpModule
{
}

0
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/FodyWeavers.xml → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xml

0
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/FodyWeavers.xsd → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xsd

8
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/LINGYUN.Abp.OssManagement.FileSystem.Imaging.csproj → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN.Abp.OssManagement.Imaging.csproj

@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" /> <Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" /> <Import Project="..\..\..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<AssemblyName>LINGYUN.Abp.OssManagement.FileSystem.Imaging</AssemblyName> <AssemblyName>LINGYUN.Abp.OssManagement.Imaging</AssemblyName>
<PackageId>LINGYUN.Abp.OssManagement.FileSystem.Imaging</PackageId> <PackageId>LINGYUN.Abp.OssManagement.Imaging</PackageId>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
@ -18,7 +18,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj" /> <ProjectReference Include="..\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

16
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/LINGYUN/Abp/OssManagement/FileSystem/Imaging/AbpImagingProcesserContributor.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpImagingProcesserContributor.cs

@ -3,27 +3,30 @@ using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Http;
using Volo.Abp.Imaging; using Volo.Abp.Imaging;
namespace LINGYUN.Abp.OssManagement.FileSystem.Imaging; namespace LINGYUN.Abp.OssManagement.Imaging;
public class AbpImagingProcesserContributor : IFileSystemOssObjectProcesserContributor public class AbpImagingProcesserContributor : IOssObjectProcesserContributor
{ {
public async virtual Task ProcessAsync(FileSystemOssObjectContext context) public async virtual Task ProcessAsync(OssObjectProcesserContext context)
{ {
Stream processSreeam = new MemoryStream(); Stream processSreeam = new MemoryStream();
var copyStream = context.OssObject.Content; var copyStream = context.OssObject.Content;
await copyStream.CopyToAsync(processSreeam); await copyStream.CopyToAsync(processSreeam);
copyStream.Seek(0, SeekOrigin.Begin); copyStream.Seek(0, SeekOrigin.Begin);
var bytes = await copyStream.GetAllBytesAsync(); var bytes = await processSreeam.GetAllBytesAsync();
if (bytes.IsImage()) if (bytes.IsImage())
{ {
var args = context.Process.Split(','); var args = context.Process.Split(',');
var mimeType = MimeTypes.GetByExtension(Path.GetExtension(context.OssObject.Name));
if (Resize(args, out var resizeArgs)) if (Resize(args, out var resizeArgs))
{ {
processSreeam.Seek(0, SeekOrigin.Begin);
var imageResizer = context.ServiceProvider.GetRequiredService<IImageResizer>(); var imageResizer = context.ServiceProvider.GetRequiredService<IImageResizer>();
var resizeResult = await imageResizer.ResizeAsync(processSreeam, resizeArgs); var resizeResult = await imageResizer.ResizeAsync(processSreeam, resizeArgs, mimeType);
if (resizeResult.State == ImageProcessState.Done) if (resizeResult.State == ImageProcessState.Done)
{ {
processSreeam = resizeResult.Result; processSreeam = resizeResult.Result;
@ -31,8 +34,9 @@ public class AbpImagingProcesserContributor : IFileSystemOssObjectProcesserContr
} }
if (Compress(args)) if (Compress(args))
{ {
processSreeam.Seek(0, SeekOrigin.Begin);
var imageCompressor = context.ServiceProvider.GetRequiredService<IImageCompressor>(); var imageCompressor = context.ServiceProvider.GetRequiredService<IImageCompressor>();
var compressResult = await imageCompressor.CompressAsync(processSreeam); var compressResult = await imageCompressor.CompressAsync(processSreeam, mimeType);
if (compressResult.State == ImageProcessState.Done) if (compressResult.State == ImageProcessState.Done)
{ {
processSreeam = compressResult.Result; processSreeam = compressResult.Result;

8
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/LINGYUN/Abp/OssManagement/FileSystem/Imaging/AbpOssManagementFileSystemImagingModule.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpOssManagementImagingModule.cs

@ -1,16 +1,16 @@
using Volo.Abp.Imaging; using Volo.Abp.Imaging;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
namespace LINGYUN.Abp.OssManagement.FileSystem.Imaging; namespace LINGYUN.Abp.OssManagement.Imaging;
[DependsOn( [DependsOn(
typeof(AbpImagingAbstractionsModule), typeof(AbpImagingAbstractionsModule),
typeof(AbpOssManagementFileSystemModule))] typeof(AbpOssManagementDomainModule))]
public class AbpOssManagementFileSystemImagingModule : AbpModule public class AbpOssManagementImagingModule : AbpModule
{ {
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
Configure<FileSystemOssOptions>(options => Configure<AbpOssManagementOptions>(options =>
{ {
options.AddProcesser(new AbpImagingProcesserContributor()); options.AddProcesser(new AbpImagingProcesserContributor());
}); });

224
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs

@ -1,5 +1,7 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Minio; using Minio;
using Minio.DataModel.Args; using Minio.DataModel.Args;
using Minio.DataModel.ILM; using Minio.DataModel.ILM;
@ -22,7 +24,7 @@ namespace LINGYUN.Abp.OssManagement.Minio;
/// <summary> /// <summary>
/// Oss容器的Minio实现 /// Oss容器的Minio实现
/// </summary> /// </summary>
public class MinioOssContainer : IOssContainer, IOssObjectExpireor public class MinioOssContainer : OssContainerBase, IOssObjectExpireor
{ {
protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; }
protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; }
@ -38,7 +40,10 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
ILogger<MinioOssContainer> logger, ILogger<MinioOssContainer> logger,
IMinioBlobNameCalculator minioBlobNameCalculator, IMinioBlobNameCalculator minioBlobNameCalculator,
IBlobNormalizeNamingService blobNormalizeNamingService, IBlobNormalizeNamingService blobNormalizeNamingService,
IBlobContainerConfigurationProvider configurationProvider) IBlobContainerConfigurationProvider configurationProvider,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
: base(options, serviceScopeFactory)
{ {
Clock = clock; Clock = clock;
Logger = logger; Logger = logger;
@ -48,7 +53,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
ConfigurationProvider = configurationProvider; ConfigurationProvider = configurationProvider;
} }
public async virtual Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) public async override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request)
{ {
var client = GetMinioClient(); var client = GetMinioClient();
@ -76,7 +81,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
await tcs.Task; await tcs.Task;
} }
public async virtual Task<OssContainer> CreateAsync(string name) public async override Task<OssContainer> CreateAsync(string name)
{ {
var client = GetMinioClient(); var client = GetMinioClient();
@ -97,7 +102,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
new Dictionary<string, string>()); new Dictionary<string, string>());
} }
public async virtual Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var client = GetMinioClient(); var client = GetMinioClient();
@ -176,46 +181,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
return ossObject; return ossObject;
} }
public async virtual Task DeleteAsync(string name) public async override Task DeleteObjectAsync(GetOssObjectRequest request)
{
var client = GetMinioClient();
var bucket = GetBucket(name);
if (!await BucketExists(client, bucket))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
}
// 非空目录无法删除
var tcs = new TaskCompletionSource<bool>();
var listObjectObs = client.ListObjectsAsync(
new ListObjectsArgs()
.WithBucket(bucket));
var listObjects = new List<string>();
using var _ = listObjectObs.Subscribe(
(item) =>
{
listObjects.Add(item.Key);
tcs.TrySetResult(true);
},
(ex) => tcs.TrySetException(ex),
() => tcs.TrySetResult(true));
await tcs.Task;
if (listObjects.Count > 0)
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithNotEmpty);
}
var deleteBucketArgs = new RemoveBucketArgs()
.WithBucket(bucket);
await client.RemoveBucketAsync(deleteBucketArgs);
}
public async virtual Task DeleteObjectAsync(GetOssObjectRequest request)
{ {
if (request.Object.EndsWith('/')) if (request.Object.EndsWith('/'))
{ {
@ -245,7 +211,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public async virtual Task<bool> ExistsAsync(string name) public async override Task<bool> ExistsAsync(string name)
{ {
var client = GetMinioClient(); var client = GetMinioClient();
@ -297,7 +263,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public async virtual Task<OssContainer> GetAsync(string name) public async override Task<OssContainer> GetAsync(string name)
{ {
var client = GetMinioClient(); var client = GetMinioClient();
@ -319,7 +285,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
new Dictionary<string, string>()); new Dictionary<string, string>());
} }
public async virtual Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request) public async override Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{ {
var client = GetMinioClient(); var client = GetMinioClient();
@ -347,70 +313,7 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
resultObjects); resultObjects);
} }
public async virtual Task<OssObject> GetObjectAsync(GetOssObjectRequest request) public async override Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{
var client = GetMinioClient();
var bucket = GetBucket(request.Bucket);
var prefixPath = GetPrefixPath();
var objectPath = GetBlobPath(prefixPath, request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath.EnsureEndsWith('/') + request.Object;
if (!await ObjectExists(client, bucket, objectName))
{
throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound);
}
var memoryStream = new MemoryStream();
var getObjectArgs = new GetObjectArgs()
.WithBucket(bucket)
.WithObject(objectName)
.WithCallbackStream((stream) =>
{
if (stream != null)
{
stream.CopyTo(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
}
else
{
memoryStream = null;
}
});
var getObjectResult = await client.GetObjectAsync(getObjectArgs);
var ossObject = new OssObject(
!objectPath.IsNullOrWhiteSpace()
? getObjectResult.ObjectName.Replace(objectPath, "")
: getObjectResult.ObjectName,
request.Path,
getObjectResult.ETag,
getObjectResult.LastModified,
memoryStream.Length,
getObjectResult.LastModified,
getObjectResult.MetaData,
getObjectResult.ObjectName.EndsWith("/"))
{
FullName = getObjectResult.ObjectName.Replace(prefixPath, "")
};
if (memoryStream.Length > 0)
{
ossObject.SetContent(memoryStream);
}
if (!request.Process.IsNullOrWhiteSpace())
{
// TODO: 文件流处理
}
return ossObject;
}
public async virtual Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{ {
var client = GetMinioClient(); var client = GetMinioClient();
@ -476,6 +379,103 @@ public class MinioOssContainer : IOssContainer, IOssObjectExpireor
resultObjects); resultObjects);
} }
protected async override Task DeleteBucketAsync(string name)
{
var client = GetMinioClient();
var bucket = GetBucket(name);
if (!await BucketExists(client, bucket))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
}
// 非空目录无法删除
var tcs = new TaskCompletionSource<bool>();
var listObjectObs = client.ListObjectsAsync(
new ListObjectsArgs()
.WithBucket(bucket));
var listObjects = new List<string>();
using var _ = listObjectObs.Subscribe(
(item) =>
{
listObjects.Add(item.Key);
tcs.TrySetResult(true);
},
(ex) => tcs.TrySetException(ex),
() => tcs.TrySetResult(true));
await tcs.Task;
if (listObjects.Count > 0)
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithNotEmpty);
}
var deleteBucketArgs = new RemoveBucketArgs()
.WithBucket(bucket);
await client.RemoveBucketAsync(deleteBucketArgs);
}
protected async override Task<OssObject> GetOssObjectAsync(GetOssObjectRequest request)
{
var client = GetMinioClient();
var bucket = GetBucket(request.Bucket);
var prefixPath = GetPrefixPath();
var objectPath = GetBlobPath(prefixPath, request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath.EnsureEndsWith('/') + request.Object;
if (!await ObjectExists(client, bucket, objectName))
{
throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound);
}
var memoryStream = new MemoryStream();
var getObjectArgs = new GetObjectArgs()
.WithBucket(bucket)
.WithObject(objectName)
.WithCallbackStream((stream) =>
{
if (stream != null)
{
stream.CopyTo(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
}
else
{
memoryStream = null;
}
});
var getObjectResult = await client.GetObjectAsync(getObjectArgs);
var ossObject = new OssObject(
!objectPath.IsNullOrWhiteSpace()
? getObjectResult.ObjectName.Replace(objectPath, "")
: getObjectResult.ObjectName,
request.Path,
getObjectResult.ETag,
getObjectResult.LastModified,
memoryStream.Length,
getObjectResult.LastModified,
getObjectResult.MetaData,
getObjectResult.ObjectName.EndsWith("/"))
{
FullName = getObjectResult.ObjectName.Replace(prefixPath, "")
};
if (memoryStream.Length > 0)
{
ossObject.SetContent(memoryStream);
}
return ossObject;
}
protected virtual IMinioClient GetMinioClient() protected virtual IMinioClient GetMinioClient()
{ {
var configuration = GetMinioConfiguration(); var configuration = GetMinioConfiguration();

17
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainerFactory.cs

@ -1,4 +1,6 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring;
using Volo.Abp.BlobStoring.Minio; using Volo.Abp.BlobStoring.Minio;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -15,17 +17,24 @@ public class MinioOssContainerFactory : IOssContainerFactory
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected ILogger<MinioOssContainer> Logger { get; } protected ILogger<MinioOssContainer> Logger { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected IOptions<AbpOssManagementOptions> Options { get; }
public MinioOssContainerFactory( public MinioOssContainerFactory(
IClock clock, IClock clock,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
ILogger<MinioOssContainer> logger, ILogger<MinioOssContainer> logger,
IMinioBlobNameCalculator minioBlobNameCalculator, IMinioBlobNameCalculator minioBlobNameCalculator,
IBlobNormalizeNamingService blobNormalizeNamingService, IBlobNormalizeNamingService blobNormalizeNamingService,
IBlobContainerConfigurationProvider configurationProvider) IBlobContainerConfigurationProvider configurationProvider,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
{ {
Clock = clock; Clock = clock;
Logger = logger; Logger = logger;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
Options = options;
ServiceScopeFactory = serviceScopeFactory;
MinioBlobNameCalculator = minioBlobNameCalculator; MinioBlobNameCalculator = minioBlobNameCalculator;
BlobNormalizeNamingService = blobNormalizeNamingService; BlobNormalizeNamingService = blobNormalizeNamingService;
ConfigurationProvider = configurationProvider; ConfigurationProvider = configurationProvider;
@ -39,6 +48,8 @@ public class MinioOssContainerFactory : IOssContainerFactory
Logger, Logger,
MinioBlobNameCalculator, MinioBlobNameCalculator,
BlobNormalizeNamingService, BlobNormalizeNamingService,
ConfigurationProvider); ConfigurationProvider,
ServiceScopeFactory,
Options);
} }
} }

143
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs

@ -5,6 +5,8 @@ using LINGYUN.Abp.Sonatype.Nexus.Search;
using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI; using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI;
using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI.Assets; using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI.Assets;
using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI.Browsers; using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI.Browsers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -17,7 +19,7 @@ using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.OssManagement.Nexus; namespace LINGYUN.Abp.OssManagement.Nexus;
internal class NexusOssContainer : IOssContainer, IOssObjectExpireor internal class NexusOssContainer : OssContainerBase, IOssObjectExpireor
{ {
protected ICoreUiServiceProxy CoreUiServiceProxy { get; } protected ICoreUiServiceProxy CoreUiServiceProxy { get; }
protected INexusAssetManager NexusAssetManager { get; } protected INexusAssetManager NexusAssetManager { get; }
@ -34,7 +36,10 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
INexusLookupService nexusLookupService, INexusLookupService nexusLookupService,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IBlobRawPathCalculator blobRawPathCalculator, IBlobRawPathCalculator blobRawPathCalculator,
IBlobContainerConfigurationProvider configurationProvider) IBlobContainerConfigurationProvider configurationProvider,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
: base(options, serviceScopeFactory)
{ {
CoreUiServiceProxy = coreUiServiceProxy; CoreUiServiceProxy = coreUiServiceProxy;
NexusAssetManager = nexusAssetManager; NexusAssetManager = nexusAssetManager;
@ -45,12 +50,12 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
ConfigurationProvider = configurationProvider; ConfigurationProvider = configurationProvider;
} }
public Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) public override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public async virtual Task<OssContainer> CreateAsync(string name) public async override Task<OssContainer> CreateAsync(string name)
{ {
// 创建容器的逻辑就是创建一个包含一个空白assets的component // 创建容器的逻辑就是创建一个包含一个空白assets的component
@ -72,7 +77,7 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
DateTime.Now); DateTime.Now);
} }
public async virtual Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var nexusConfiguration = GetNexusConfiguration(); var nexusConfiguration = GetNexusConfiguration();
var blobPath = GetBasePath(request.Bucket, request.Path, request.Object); var blobPath = GetBasePath(request.Bucket, request.Path, request.Object);
@ -106,27 +111,7 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
return await GetObjectAsync(getOssObjectRequest); return await GetObjectAsync(getOssObjectRequest);
} }
public async virtual Task DeleteAsync(string name) public async override Task DeleteObjectAsync(GetOssObjectRequest request)
{
var nexusConfiguration = GetNexusConfiguration();
var blobPath = BlobRawPathCalculator.CalculateGroup(name, "/");
var nexusSearchArgs = new NexusSearchArgs(
nexusConfiguration.Repository,
blobPath,
"/");
var nexusComponentListResult = await NexusLookupService.ListComponentAsync(nexusSearchArgs);
var nexusComponent = nexusComponentListResult.Items.FirstOrDefault();
if (nexusComponent == null)
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
}
await NexusComponentManager.DeleteAsync(nexusComponent.Id);
}
public async virtual Task DeleteObjectAsync(GetOssObjectRequest request)
{ {
var nexusConfiguration = GetNexusConfiguration(); var nexusConfiguration = GetNexusConfiguration();
var blobPath = GetBasePath(request.Bucket, request.Path, request.Object); var blobPath = GetBasePath(request.Bucket, request.Path, request.Object);
@ -145,17 +130,17 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public virtual Task<bool> ExistsAsync(string name) public override Task<bool> ExistsAsync(string name)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task ExpireAsync(ExprieOssObjectRequest request) public virtual Task ExpireAsync(ExprieOssObjectRequest request)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public async virtual Task<OssContainer> GetAsync(string name) public async override Task<OssContainer> GetAsync(string name)
{ {
var nexusConfiguration = GetNexusConfiguration(); var nexusConfiguration = GetNexusConfiguration();
var blobPath = BlobRawPathCalculator.CalculateGroup(name, "/"); var blobPath = BlobRawPathCalculator.CalculateGroup(name, "/");
@ -184,7 +169,7 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
lastModified); lastModified);
} }
public async virtual Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request) public async override Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{ {
var nexusConfiguration = GetNexusConfiguration(); var nexusConfiguration = GetNexusConfiguration();
var blobPath = request.Prefix.RemovePreFix(".").RemovePreFix("/"); var blobPath = request.Prefix.RemovePreFix(".").RemovePreFix("/");
@ -208,7 +193,65 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
.ToList()); .ToList());
} }
public async virtual Task<OssObject> GetObjectAsync(GetOssObjectRequest request) public async override Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{
var nexusConfiguration = GetNexusConfiguration();
var blobPath = GetBasePath(request.BucketName, request.Prefix, "");
var readComponent = CoreUIBrowse.Read(nexusConfiguration.Repository, blobPath.RemovePreFix("/"));
var coreUIResponse = await CoreUiServiceProxy.SearchAsync<CoreUIBrowseReadComponent, CoreUIBrowseComponentResult>(readComponent);
var filterComponents = coreUIResponse.Result.Data
.WhereIf(string.Equals(request.Delimiter, "/"), component => component.Type == "folder")
.OrderBy(component => component.Text)
.AsQueryable()
.PageBy(request.Current, request.MaxKeys ?? 10)
.ToArray();
var response = new GetOssObjectsResponse(
request.BucketName,
request.Prefix,
request.Marker,
"",
"/", // 文件系统目录分隔符
coreUIResponse.Result.Data.Count,
filterComponents.Select(component => new OssObject(
component.Text,
request.Prefix,
"",
null,
0L,
null,
new Dictionary<string, string>(),
component.Type == "folder")
{
FullName = component.Id
})
.ToList());
return response;
}
protected async override Task DeleteBucketAsync(string name)
{
var nexusConfiguration = GetNexusConfiguration();
var blobPath = BlobRawPathCalculator.CalculateGroup(name, "/");
var nexusSearchArgs = new NexusSearchArgs(
nexusConfiguration.Repository,
blobPath,
"/");
var nexusComponentListResult = await NexusLookupService.ListComponentAsync(nexusSearchArgs);
var nexusComponent = nexusComponentListResult.Items.FirstOrDefault();
if (nexusComponent == null)
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
}
await NexusComponentManager.DeleteAsync(nexusComponent.Id);
}
protected async override Task<OssObject> GetOssObjectAsync(GetOssObjectRequest request)
{ {
var nexusConfiguration = GetNexusConfiguration(); var nexusConfiguration = GetNexusConfiguration();
var blobPath = GetBasePath(request.Bucket, request.Path, request.Object); var blobPath = GetBasePath(request.Bucket, request.Path, request.Object);
@ -253,44 +296,6 @@ internal class NexusOssContainer : IOssContainer, IOssObjectExpireor
); );
} }
public async virtual Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{
var nexusConfiguration = GetNexusConfiguration();
var blobPath = GetBasePath(request.BucketName, request.Prefix, "");
var readComponent = CoreUIBrowse.Read(nexusConfiguration.Repository, blobPath.RemovePreFix("/"));
var coreUIResponse = await CoreUiServiceProxy.SearchAsync<CoreUIBrowseReadComponent, CoreUIBrowseComponentResult>(readComponent);
var filterComponents = coreUIResponse.Result.Data
.WhereIf(string.Equals(request.Delimiter, "/"), component => component.Type == "folder")
.OrderBy(component => component.Text)
.AsQueryable()
.PageBy(request.Current, request.MaxKeys ?? 10)
.ToArray();
var response = new GetOssObjectsResponse(
request.BucketName,
request.Prefix,
request.Marker,
"",
"/", // 文件系统目录分隔符
coreUIResponse.Result.Data.Count,
filterComponents.Select(component => new OssObject(
component.Text,
request.Prefix,
"",
null,
0L,
null,
new Dictionary<string, string>(),
component.Type == "folder")
{
FullName = component.Id
})
.ToList());
return response;
}
protected virtual NexusBlobProviderConfiguration GetNexusConfiguration() protected virtual NexusBlobProviderConfiguration GetNexusConfiguration()
{ {
var configuration = ConfigurationProvider.Get<AbpOssManagementContainer>(); var configuration = ConfigurationProvider.Get<AbpOssManagementContainer>();

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainerFactory.cs

@ -3,6 +3,8 @@ using LINGYUN.Abp.Sonatype.Nexus.Assets;
using LINGYUN.Abp.Sonatype.Nexus.Components; using LINGYUN.Abp.Sonatype.Nexus.Components;
using LINGYUN.Abp.Sonatype.Nexus.Search; using LINGYUN.Abp.Sonatype.Nexus.Search;
using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI; using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -17,6 +19,9 @@ internal class NexusOssContainerFactory : IOssContainerFactory
protected IBlobRawPathCalculator BlobRawPathCalculator { get; } protected IBlobRawPathCalculator BlobRawPathCalculator { get; }
protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } protected IBlobContainerConfigurationProvider ConfigurationProvider { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected IOptions<AbpOssManagementOptions> Options { get; }
public NexusOssContainerFactory( public NexusOssContainerFactory(
ICoreUiServiceProxy coreUiServiceProxy, ICoreUiServiceProxy coreUiServiceProxy,
INexusAssetManager nexusAssetManager, INexusAssetManager nexusAssetManager,
@ -24,7 +29,9 @@ internal class NexusOssContainerFactory : IOssContainerFactory
INexusLookupService nexusLookupService, INexusLookupService nexusLookupService,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IBlobRawPathCalculator blobRawPathCalculator, IBlobRawPathCalculator blobRawPathCalculator,
IBlobContainerConfigurationProvider configurationProvider) IBlobContainerConfigurationProvider configurationProvider,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
{ {
CoreUiServiceProxy = coreUiServiceProxy; CoreUiServiceProxy = coreUiServiceProxy;
NexusAssetManager = nexusAssetManager; NexusAssetManager = nexusAssetManager;
@ -33,6 +40,8 @@ internal class NexusOssContainerFactory : IOssContainerFactory
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
BlobRawPathCalculator = blobRawPathCalculator; BlobRawPathCalculator = blobRawPathCalculator;
ConfigurationProvider = configurationProvider; ConfigurationProvider = configurationProvider;
Options = options;
ServiceScopeFactory = serviceScopeFactory;
} }
public IOssContainer Create() public IOssContainer Create()
@ -44,6 +53,8 @@ internal class NexusOssContainerFactory : IOssContainerFactory
NexusLookupService, NexusLookupService,
CurrentTenant, CurrentTenant,
BlobRawPathCalculator, BlobRawPathCalculator,
ConfigurationProvider); ConfigurationProvider,
ServiceScopeFactory,
Options);
} }
} }

155
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs

@ -3,6 +3,8 @@ using COSXML.Model.Bucket;
using COSXML.Model.Object; using COSXML.Model.Object;
using COSXML.Model.Service; using COSXML.Model.Service;
using LINGYUN.Abp.BlobStoring.Tencent; using LINGYUN.Abp.BlobStoring.Tencent;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -17,7 +19,7 @@ namespace LINGYUN.Abp.OssManagement.Tencent;
/// <summary> /// <summary>
/// Oss容器的阿里云实现 /// Oss容器的阿里云实现
/// </summary> /// </summary>
internal class TencentOssContainer : IOssContainer, IOssObjectExpireor internal class TencentOssContainer : OssContainerBase, IOssObjectExpireor
{ {
protected IClock Clock { get; } protected IClock Clock { get; }
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
@ -25,13 +27,16 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
public TencentOssContainer( public TencentOssContainer(
IClock clock, IClock clock,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
ICosClientFactory cosClientFactory) ICosClientFactory cosClientFactory,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
: base(options, serviceScopeFactory)
{ {
Clock = clock; Clock = clock;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
CosClientFactory = cosClientFactory; CosClientFactory = cosClientFactory;
} }
public async virtual Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) public async override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -42,7 +47,7 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
ossClient.DeleteMultiObjects(deleteRequest); ossClient.DeleteMultiObjects(deleteRequest);
} }
public async virtual Task<OssContainer> CreateAsync(string name) public async override Task<OssContainer> CreateAsync(string name)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -66,7 +71,7 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
}); });
} }
public async virtual Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -146,19 +151,6 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
return ossObject; return ossObject;
} }
public async virtual Task DeleteAsync(string name)
{
// 阿里云oss在控制台设置即可,无需改变
var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, name))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
}
var deleteBucketRequest = new DeleteBucketRequest(name);
ossClient.DeleteBucket(deleteBucketRequest);
}
public async virtual Task ExpireAsync(ExprieOssObjectRequest request) public async virtual Task ExpireAsync(ExprieOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -186,7 +178,7 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public async virtual Task DeleteObjectAsync(GetOssObjectRequest request) public async override Task DeleteObjectAsync(GetOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -212,14 +204,14 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
} }
} }
public async virtual Task<bool> ExistsAsync(string name) public async override Task<bool> ExistsAsync(string name)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
return BucketExists(ossClient, name); return BucketExists(ossClient, name);
} }
public async virtual Task<OssContainer> GetAsync(string name) public async override Task<OssContainer> GetAsync(string name)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, name)) if (!BucketExists(ossClient, name))
@ -242,59 +234,7 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
}); });
} }
public async virtual Task<OssObject> GetObjectAsync(GetOssObjectRequest request) public async override Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{
var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, request.Bucket))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
// throw new ContainerNotFoundException($"Can't not found container {request.Bucket} in aliyun blob storing");
}
var objectPath = GetBasePath(request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath + request.Object;
if (!ObjectExists(ossClient, request.Bucket, objectName))
{
throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound);
// throw new ContainerNotFoundException($"Can't not found object {objectName} in container {request.Bucket} with aliyun blob storing");
}
var getObjectRequest = new GetObjectBytesRequest(request.Bucket, objectName);
if (!request.Process.IsNullOrWhiteSpace())
{
getObjectRequest.SetQueryParameter(request.Process, null);
}
var objectResult = ossClient.GetObject(getObjectRequest);
var ossObject = new OssObject(
!objectPath.IsNullOrWhiteSpace()
? objectResult.Key.Replace(objectPath, "")
: objectResult.Key,
request.Path,
objectResult.eTag,
null,
objectResult.content.Length,
null,
new Dictionary<string, string>(),
objectResult.Key.EndsWith("/"))
{
FullName = objectResult.Key
};
if (objectResult.content.Length > 0)
{
var memoryStream = new MemoryStream();
await memoryStream.WriteAsync(objectResult.content, 0, objectResult.content.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
ossObject.SetContent(memoryStream);
}
return ossObject;
}
public async virtual Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -321,7 +261,7 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
.ToList()); .ToList());
} }
public async virtual Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request) public async override Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
@ -394,6 +334,71 @@ internal class TencentOssContainer : IOssContainer, IOssObjectExpireor
ossObjects); ossObjects);
} }
protected async override Task DeleteBucketAsync(string name)
{
// 腾讯云oss在控制台设置即可,无需改变
var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, name))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
}
var deleteBucketRequest = new DeleteBucketRequest(name);
ossClient.DeleteBucket(deleteBucketRequest);
}
protected async override Task<OssObject> GetOssObjectAsync(GetOssObjectRequest request)
{
var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, request.Bucket))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
// throw new ContainerNotFoundException($"Can't not found container {request.Bucket} in aliyun blob storing");
}
var objectPath = GetBasePath(request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath + request.Object;
if (!ObjectExists(ossClient, request.Bucket, objectName))
{
throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound);
// throw new ContainerNotFoundException($"Can't not found object {objectName} in container {request.Bucket} with aliyun blob storing");
}
var getObjectRequest = new GetObjectBytesRequest(request.Bucket, objectName);
if (!request.Process.IsNullOrWhiteSpace())
{
getObjectRequest.SetQueryParameter(request.Process, null);
}
var objectResult = ossClient.GetObject(getObjectRequest);
var ossObject = new OssObject(
!objectPath.IsNullOrWhiteSpace()
? objectResult.Key.Replace(objectPath, "")
: objectResult.Key,
request.Path,
objectResult.eTag,
null,
objectResult.content.Length,
null,
new Dictionary<string, string>(),
objectResult.Key.EndsWith("/"))
{
FullName = objectResult.Key
};
if (objectResult.content.Length > 0)
{
var memoryStream = new MemoryStream();
await memoryStream.WriteAsync(objectResult.content, 0, objectResult.content.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
ossObject.SetContent(memoryStream);
}
return ossObject;
}
protected virtual string GetBasePath(string path) protected virtual string GetBasePath(string path)
{ {
string objectPath = ""; string objectPath = "";

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainerFactory.cs

@ -1,4 +1,6 @@
using LINGYUN.Abp.BlobStoring.Tencent; using LINGYUN.Abp.BlobStoring.Tencent;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.Abp.Timing; using Volo.Abp.Timing;
@ -10,14 +12,21 @@ public class TencentOssContainerFactory : IOssContainerFactory
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected ICosClientFactory CosClientFactory { get; } protected ICosClientFactory CosClientFactory { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected IOptions<AbpOssManagementOptions> Options { get; }
public TencentOssContainerFactory( public TencentOssContainerFactory(
IClock clock, IClock clock,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
ICosClientFactory cosClientFactory) ICosClientFactory cosClientFactory,
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpOssManagementOptions> options)
{ {
Clock = clock; Clock = clock;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
CosClientFactory = cosClientFactory; CosClientFactory = cosClientFactory;
Options = options;
ServiceScopeFactory = serviceScopeFactory;
} }
public IOssContainer Create() public IOssContainer Create()
@ -25,6 +34,8 @@ public class TencentOssContainerFactory : IOssContainerFactory
return new TencentOssContainer( return new TencentOssContainer(
Clock, Clock,
CurrentTenant, CurrentTenant,
CosClientFactory); CosClientFactory,
ServiceScopeFactory,
Options);
} }
} }

9
aspnet-core/modules/oss-management/README.md

@ -19,10 +19,12 @@ File-Management更名为Oss-Management
* [LINGYUN.Abp.BlobStoring.OssManagement](./LINGYUN.Abp.BlobStoring.OssManagement) abp框架对象存储提供者**IBlobProvider**的Oss管理模块实现, 依赖于Oss客户端代理模块 * [LINGYUN.Abp.BlobStoring.OssManagement](./LINGYUN.Abp.BlobStoring.OssManagement) abp框架对象存储提供者**IBlobProvider**的Oss管理模块实现, 依赖于Oss客户端代理模块
* [LINGYUN.Abp.OssManagement.Aliyun](./LINGYUN.Abp.OssManagement.Aliyun) Oss管理的阿里云实现,实现了部分阿里云Oss服务的容器与对象管理 * [LINGYUN.Abp.OssManagement.Aliyun](./LINGYUN.Abp.OssManagement.Aliyun) Oss管理的阿里云实现,实现了部分阿里云Oss服务的容器与对象管理
* [LINGYUN.Abp.OssManagement.FileSystem](./LINGYUN.Abp.OssManagement.FileSystem) Oss管理的本地文件系统实现,实现了部分本地文件系统的容器(目录)与对象(文件/目录)管理 * [LINGYUN.Abp.OssManagement.FileSystem](./LINGYUN.Abp.OssManagement.FileSystem) Oss管理的本地文件系统实现,实现了部分本地文件系统的容器(目录)与对象(文件/目录)管理
* [LINGYUN.Abp.OssManagement.FileSystem.ImageSharp](./LINGYUN.Abp.OssManagement.FileSystem.ImageSharp) Oss本地对象的ImageSharp扩展,当前端传递需求处理对象时,此模块用于实现基于图形文件流的处理 * [LINGYUN.Abp.OssManagement.ImageSharp](./LINGYUN.Abp.OssManagement.ImageSharp) Oss对象的ImageSharp扩展,当前端传递需求处理对象时,此模块用于实现基于图形文件流的处理
* [LINGYUN.Abp.OssManagement.FileSystem.Imaging](./LINGYUN.Abp.OssManagement.FileSystem.Imaging) Oss本地对象的Volo.Abp.Imaging扩展 * [LINGYUN.Abp.OssManagement.Imaging](./LINGYUN.Abp.OssManagement.Imaging) Oss对象的Volo.Abp.Imaging扩展
* [LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp](./LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp) Oss本地对象的Volo.Abp.Imaging.ImageSharp扩展 * [LINGYUN.Abp.OssManagement.Imaging.ImageSharp](./LINGYUN.Abp.OssManagement.Imaging.ImageSharp) Oss对象的Volo.Abp.Imaging.ImageSharp扩展
* [LINGYUN.Abp.OssManagement.Nexus](./LINGYUN.Abp.OssManagement.Nexus) Oss管理的Nexus实现,管理来自私有Nexus仓库的RAW存储类型 * [LINGYUN.Abp.OssManagement.Nexus](./LINGYUN.Abp.OssManagement.Nexus) Oss管理的Nexus实现,管理来自私有Nexus仓库的RAW存储类型
* [LINGYUN.Abp.OssManagement.Minio](./LINGYUN.Abp.OssManagement.Minio) Oss管理的Minio实现,管理基于Minio的对象存储服务
* [LINGYUN.Abp.OssManagement.Tencent](./LINGYUN.Abp.OssManagement.Tencent) Oss管理的腾讯云实现,实现了部分腾讯云Oss服务的容器与对象管理(未完全实现)
### 权限定义 ### 权限定义
@ -57,3 +59,4 @@ File-Management更名为Oss-Management
*【2021-12-13】 增加LINGYUN.Abp.BlobStoring.OssManagement用于实现Oss代理二进制文件存储 *【2021-12-13】 增加LINGYUN.Abp.BlobStoring.OssManagement用于实现Oss代理二进制文件存储
*【2023-09-04】 集成Volo.Abp.Imaging模块用于图形文件流处理 *【2023-09-04】 集成Volo.Abp.Imaging模块用于图形文件流处理
*【2023-10-11】 集成Nexus仓库实现基于Nexus Raw类型存储(**未完善**) *【2023-10-11】 集成Nexus仓库实现基于Nexus Raw类型存储(**未完善**)
*【2024-10-24】 集成Volo.Abp.BlobStoring.Minio模块用于实现基于Minio的文件存储

4
aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj

@ -170,6 +170,7 @@
<ProjectReference Include="..\..\modules\localization-management\LINGYUN.Abp.LocalizationManagement.HttpApi\LINGYUN.Abp.LocalizationManagement.HttpApi.csproj" /> <ProjectReference Include="..\..\modules\localization-management\LINGYUN.Abp.LocalizationManagement.HttpApi\LINGYUN.Abp.LocalizationManagement.HttpApi.csproj" />
<ProjectReference Include="..\..\modules\openIddict\LINGYUN.Abp.OpenIddict.AspNetCore.Session\LINGYUN.Abp.OpenIddict.AspNetCore.Session.csproj" /> <ProjectReference Include="..\..\modules\openIddict\LINGYUN.Abp.OpenIddict.AspNetCore.Session\LINGYUN.Abp.OpenIddict.AspNetCore.Session.csproj" />
<ProjectReference Include="..\..\modules\openIddict\LINGYUN.Abp.OpenIddict.AspNetCore\LINGYUN.Abp.OpenIddict.AspNetCore.csproj" /> <ProjectReference Include="..\..\modules\openIddict\LINGYUN.Abp.OpenIddict.AspNetCore\LINGYUN.Abp.OpenIddict.AspNetCore.csproj" />
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Imaging.ImageSharp\LINGYUN.Abp.OssManagement.Imaging.ImageSharp.csproj" />
<ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj" /> <ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj" />
<ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj" /> <ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj" />
<ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj" /> <ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj" />
@ -203,9 +204,8 @@
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj" /> <ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj" />
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj" /> <ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj" />
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj" /> <ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj" />
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj" />
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj" /> <ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj" />
<!--<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj" />--> <ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj" />
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj" /> <ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj" />
<ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj" /> <ProjectReference Include="..\..\modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj" />
<ProjectReference Include="..\..\modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application\LINGYUN.Abp.PermissionManagement.Application.csproj" /> <ProjectReference Include="..\..\modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application\LINGYUN.Abp.PermissionManagement.Application.csproj" />

1
aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.Configure.cs

@ -60,6 +60,7 @@ using Volo.Abp.Auditing;
using Volo.Abp.Authorization.Permissions; using Volo.Abp.Authorization.Permissions;
using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring;
using Volo.Abp.BlobStoring.FileSystem; using Volo.Abp.BlobStoring.FileSystem;
using Volo.Abp.BlobStoring.Minio;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.FeatureManagement; using Volo.Abp.FeatureManagement;

9
aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs

@ -69,7 +69,9 @@ using LINGYUN.Abp.OpenIddict.Sms;
using LINGYUN.Abp.OpenIddict.WeChat; using LINGYUN.Abp.OpenIddict.WeChat;
using LINGYUN.Abp.OpenIddict.WeChat.Work; using LINGYUN.Abp.OpenIddict.WeChat.Work;
using LINGYUN.Abp.OssManagement; using LINGYUN.Abp.OssManagement;
using LINGYUN.Abp.OssManagement.FileSystem.ImageSharp; using LINGYUN.Abp.OssManagement.FileSystem;
using LINGYUN.Abp.OssManagement.Imaging.ImageSharp;
using LINGYUN.Abp.OssManagement.Minio;
using LINGYUN.Abp.OssManagement.SettingManagement; using LINGYUN.Abp.OssManagement.SettingManagement;
using LINGYUN.Abp.PermissionManagement; using LINGYUN.Abp.PermissionManagement;
using LINGYUN.Abp.PermissionManagement.HttpApi; using LINGYUN.Abp.PermissionManagement.HttpApi;
@ -175,8 +177,9 @@ namespace LY.MicroService.Applications.Single;
typeof(AbpOpenIddictWeChatModule), typeof(AbpOpenIddictWeChatModule),
typeof(AbpOpenIddictWeChatWorkModule), typeof(AbpOpenIddictWeChatWorkModule),
// typeof(AbpOssManagementMinioModule), // 取消注释以使用Minio //typeof(AbpOssManagementMinioModule), // 取消注释以使用Minio
typeof(AbpOssManagementFileSystemImageSharpModule), typeof(AbpOssManagementFileSystemModule),
typeof(AbpOssManagementImagingImageSharpModule),
typeof(AbpOssManagementDomainModule), typeof(AbpOssManagementDomainModule),
typeof(AbpOssManagementApplicationModule), typeof(AbpOssManagementApplicationModule),
typeof(AbpOssManagementHttpApiModule), typeof(AbpOssManagementHttpApiModule),

Loading…
Cancel
Save