Browse Source

Merge pull request #216 from colinin/4.2

Backlog object storage management
pull/252/head
cKey 5 years ago
committed by GitHub
parent
commit
6be2af5c46
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 45
      aspnet-core/LINGYUN.MicroService.All.sln
  2. 18
      aspnet-core/LINGYUN.MicroService.BackendAdmin.sln
  3. 85
      aspnet-core/LINGYUN.MicroService.Platform.sln
  4. 33
      aspnet-core/database/ApiGateway-Init-SqlServer.sql
  5. 212
      aspnet-core/database/ApiGateway-Init.sql
  6. 2
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.Mvc.Validation/LINGYUN.Abp.AspNetCore.Mvc.Validation.csproj
  7. 2
      aspnet-core/modules/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN.Abp.BlobStoring.Aliyun.csproj
  8. 5
      aspnet-core/modules/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/IOssClientFactory.cs
  9. 12
      aspnet-core/modules/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/OssClientFactory.cs
  10. 12
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/AbpFileManagementApplicationContractsModule.cs
  11. 49
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Features/AbpFileManagementFeatureDefinitionProvider.cs
  12. 23
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Features/AbpFileManagementFeatureNames.cs
  13. 21
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileCopyOrMoveDto.cs
  14. 32
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileCreateDto.cs
  15. 14
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileDeleteDto.cs
  16. 15
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemDownloadDto.cs
  17. 15
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemDto.cs
  18. 8
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemType.cs
  19. 11
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemUpdateDto.cs
  20. 11
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FolderCopyDto.cs
  21. 13
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FolderCreateDto.cs
  22. 11
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FolderMoveDto.cs
  23. 14
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/GetFileSystemListDto.cs
  24. 35
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/IFileSystemAppService.cs
  25. 34
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Permissions/AbpFileManagementPermissionDefinitionProvider.cs
  26. 44
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Permissions/AbpFileManagementPermissions.cs
  27. 15
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN.Abp.FileManagement.Application.csproj
  28. 12
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN/Abp/FileManagement/AbpFileManagementApplicationModule.cs
  29. 13
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN/Abp/FileManagement/FileManagementApplicationServiceBase.cs
  30. 467
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN/Abp/FileManagement/FileSystemAppService.cs
  31. 30
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/AbpFileManagementDomainSharedModule.cs
  32. 9
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Localization/AbpFileManagementResource.cs
  33. 39
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Localization/Resources/en.json
  34. 39
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Localization/Resources/zh-Hans.json
  35. 18
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain/LINGYUN.Abp.FileManagement.Domain.csproj
  36. 15
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain/LINGYUN/Abp/FileManagement/AbpFileManagementDomainModule.cs
  37. 9
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain/LINGYUN/Abp/FileManagement/FileSystemContainer.cs
  38. 265
      aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.HttpApi/LINGYUN/Abp/FileManagement/FileSystemController.cs
  39. 22
      aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application/LINGYUN/Abp/Identity/AbpIdentityApplicationModule.cs
  40. 14
      aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain.Shared/LINGYUN/Abp/Identity/ExtensionIdentityUserConsts.cs
  41. 18
      aspnet-core/modules/identity/LINGYUN.Abp.Identity.EntityFrameworkCore/LINGYUN/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs
  42. 13
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN.Abp.OssManagement.Aliyun.csproj
  43. 17
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AbpOssManagementAliyunModule.cs
  44. 369
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs
  45. 26
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainerFactory.cs
  46. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.md
  47. 2
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN.Abp.OssManagement.Application.Contracts.csproj
  48. 12
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationContractsModule.cs
  49. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/BulkDeleteOssObjectInput.cs
  50. 25
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs
  51. 73
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs
  52. 41
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs
  53. 10
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssContainersInput.cs
  54. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs
  55. 13
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectsInput.cs
  56. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetStaticFileInput.cs
  57. 18
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssContainerAppService.cs
  58. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssObjectAppService.cs
  59. 11
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs
  60. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainerDto.cs
  61. 13
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainersResultDto.cs
  62. 7
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssManagementRemoteServiceConsts.cs
  63. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectDto.cs
  64. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectsResultDto.cs
  65. 28
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs
  66. 27
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissions.cs
  67. 19
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj
  68. 23
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationModule.cs
  69. 70
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs
  70. 17
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationAutoMapperProfile.cs
  71. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationServiceBase.cs
  72. 113
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs
  73. 39
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs
  74. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN.Abp.OssManagement.Domain.Shared.csproj
  75. 36
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/AbpOssManagementDomainSharedModule.cs
  76. 9
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/AbpOssManagementResource.cs
  77. 51
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/en.json
  78. 51
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/zh-Hans.json
  79. 17
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssManagementErrorCodes.cs
  80. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs
  81. 10
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingNames.cs
  82. 12
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/System/IO/StreamExtensions.cs
  83. 20
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN.Abp.OssManagement.Domain.csproj
  84. 9
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementContainer.cs
  85. 17
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementDomainModule.cs
  86. 26
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/BulkDeleteObjectRequest.cs
  87. 35
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/CreateOssObjectRequest.cs
  88. 18
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs
  89. 28
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersResponse.cs
  90. 31
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectRequest.cs
  91. 32
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs
  92. 33
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsResponse.cs
  93. 72
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs
  94. 79
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerExtensions.cs
  95. 18
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerFactory.cs
  96. 31
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainer.cs
  97. 50
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObject.cs
  98. 27
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectComparer.cs
  99. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj
  100. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN/Abp/OssManagement/FileSystem/ImageSharp/AbpOssManagementFileSystemImageSharpModule.cs

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

@ -177,17 +177,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpAp
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi.Client", "modules\identity\LINGYUN.Abp.Identity.HttpApi.Client\LINGYUN.Abp.Identity.HttpApi.Client.csproj", "{7DDEAEA9-E392-469C-ACB6-908C5BAD669E}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi.Client", "modules\identity\LINGYUN.Abp.Identity.HttpApi.Client\LINGYUN.Abp.Identity.HttpApi.Client.csproj", "{7DDEAEA9-E392-469C-ACB6-908C5BAD669E}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "file-management", "file-management", "{B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}"
ProjectSection(SolutionItems) = preProject
modules\cloud-aliyun\LINGYUN.Abp.Aliyun\README.md = modules\cloud-aliyun\LINGYUN.Abp.Aliyun\README.md
EndProjectSection
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Application", "modules\file-management\LINGYUN.Abp.FileManagement.Application\LINGYUN.Abp.FileManagement.Application.csproj", "{F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application", "modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj", "{F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Application.Contracts", "modules\file-management\LINGYUN.Abp.FileManagement.Application.Contracts\LINGYUN.Abp.FileManagement.Application.Contracts.csproj", "{86A67B8C-EFA0-4103-B60F-312F07C15A7A}" 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", "{86A67B8C-EFA0-4103-B60F-312F07C15A7A}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.HttpApi", "modules\file-management\LINGYUN.Abp.FileManagement.HttpApi\LINGYUN.Abp.FileManagement.HttpApi.csproj", "{854E1A42-FEA4-420E-9E83-0A39EE03F1ED}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{854E1A42-FEA4-420E-9E83-0A39EE03F1ED}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain.Shared", "modules\file-management\LINGYUN.Abp.FileManagement.Domain.Shared\LINGYUN.Abp.FileManagement.Domain.Shared.csproj", "{21FCEF89-9A3F-476E-833A-A9C2131B2AE6}" 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", "{21FCEF89-9A3F-476E-833A-A9C2131B2AE6}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain", "modules\file-management\LINGYUN.Abp.FileManagement.Domain\LINGYUN.Abp.FileManagement.Domain.csproj", "{14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj", "{14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi.Host", "services\platform\LINGYUN.Platform.HttpApi.Host\LINGYUN.Platform.HttpApi.Host.csproj", "{372123C3-3AFD-42C8-BB80-778322EA72C3}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi.Host", "services\platform\LINGYUN.Platform.HttpApi.Host\LINGYUN.Platform.HttpApi.Host.csproj", "{372123C3-3AFD-42C8-BB80-778322EA72C3}"
EndProject EndProject
@ -269,10 +272,18 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent", "modu
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Sms", "modules\common\LINGYUN.Abp.Notifications.Sms\LINGYUN.Abp.Notifications.Sms.csproj", "{8C3312E7-F51E-4780-A893-CE0E0B80B579}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Sms", "modules\common\LINGYUN.Abp.Notifications.Sms\LINGYUN.Abp.Notifications.Sms.csproj", "{8C3312E7-F51E-4780-A893-CE0E0B80B579}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Aliyun.SettingManagement", "modules\cloud-aliyun\LINGYUN.Abp.Aliyun.SettingManagement\LINGYUN.Abp.Aliyun.SettingManagement.csproj", "{FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.SettingManagement", "modules\cloud-aliyun\LINGYUN.Abp.Aliyun.SettingManagement\LINGYUN.Abp.Aliyun.SettingManagement.csproj", "{FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{B86EBB6F-A27F-4277-8265-937951A9DCB0}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{B86EBB6F-A27F-4277-8265-937951A9DCB0}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Aliyun", "modules\oss-management\LINGYUN.Abp.OssManagement.Aliyun\LINGYUN.Abp.OssManagement.Aliyun.csproj", "{35B17218-9FB6-439E-AF73-9A1454BC923C}"
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}"
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}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -719,6 +730,22 @@ Global
{B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.Build.0 = Release|Any CPU {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.Build.0 = Release|Any CPU
{35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.Build.0 = Release|Any CPU
{D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.ActiveCfg = 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.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.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.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -856,6 +883,10 @@ Global
{8C3312E7-F51E-4780-A893-CE0E0B80B579} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} {8C3312E7-F51E-4780-A893-CE0E0B80B579} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{FE0F0889-C4AF-43C5-B851-B8CCC873BA2C} = {14CDBAD1-10C8-464A-B445-1F727C988010} {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C} = {14CDBAD1-10C8-464A-B445-1F727C988010}
{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}
{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}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718} SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718}

18
aspnet-core/LINGYUN.MicroService.BackendAdmin.sln

@ -43,9 +43,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permissions-management", "p
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{7521486D-2144-4AFA-86AD-8E8021479DE6}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{7521486D-2144-4AFA-86AD-8E8021479DE6}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "file-management", "file-management", "{8F972C8E-F047-4883-A4BF-3423A2BAED36}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{8F972C8E-F047-4883-A4BF-3423A2BAED36}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain.Shared", "modules\file-management\LINGYUN.Abp.FileManagement.Domain.Shared\LINGYUN.Abp.FileManagement.Domain.Shared.csproj", "{49F8CD24-85EA-479A-A376-CC31A0618AE7}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}"
EndProject EndProject
@ -67,7 +65,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProg
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{EAD2F955-88CA-4570-AB81-31FB2FF02605}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{EAD2F955-88CA-4570-AB81-31FB2FF02605}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}"
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", "{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -127,10 +127,6 @@ Global
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.Build.0 = Release|Any CPU {7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.Build.0 = Release|Any CPU
{49F8CD24-85EA-479A-A376-CC31A0618AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49F8CD24-85EA-479A-A376-CC31A0618AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49F8CD24-85EA-479A-A376-CC31A0618AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49F8CD24-85EA-479A-A376-CC31A0618AE7}.Release|Any CPU.Build.0 = Release|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -167,6 +163,10 @@ Global
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.Build.0 = Release|Any CPU {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.Build.0 = Release|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -191,7 +191,6 @@ Global
{D25C4814-71AB-4A9D-8C76-298A7DE1A747} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C} {D25C4814-71AB-4A9D-8C76-298A7DE1A747} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{7521486D-2144-4AFA-86AD-8E8021479DE6} = {D25C4814-71AB-4A9D-8C76-298A7DE1A747} {7521486D-2144-4AFA-86AD-8E8021479DE6} = {D25C4814-71AB-4A9D-8C76-298A7DE1A747}
{8F972C8E-F047-4883-A4BF-3423A2BAED36} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C} {8F972C8E-F047-4883-A4BF-3423A2BAED36} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{49F8CD24-85EA-479A-A376-CC31A0618AE7} = {8F972C8E-F047-4883-A4BF-3423A2BAED36}
{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C} {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} {E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
@ -203,6 +202,7 @@ Global
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69} = {B36F627B-FD7D-4357-A623-F01AFF78B80D} {D42CE0F0-331F-4E5C-92CD-6B4DD6854E69} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{EAD2F955-88CA-4570-AB81-31FB2FF02605} = {B36F627B-FD7D-4357-A623-F01AFF78B80D} {EAD2F955-88CA-4570-AB81-31FB2FF02605} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB} = {B36F627B-FD7D-4357-A623-F01AFF78B80D} {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4} = {8F972C8E-F047-4883-A4BF-3423A2BAED36}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1573B900-87BA-4AD3-B785-6DD78127ADEF} SolutionGuid = {1573B900-87BA-4AD3-B785-6DD78127ADEF}

85
aspnet-core/LINGYUN.MicroService.Platform.sln

@ -23,17 +23,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi.Ho
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{4096EC6A-EEAD-4E5B-B087-393D7A4E5874}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{4096EC6A-EEAD-4E5B-B087-393D7A4E5874}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "file-management", "file-management", "{C7D0EB39-3418-4A7C-AD94-FAB76F023E88}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{C7D0EB39-3418-4A7C-AD94-FAB76F023E88}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain.Shared", "modules\file-management\LINGYUN.Abp.FileManagement.Domain.Shared\LINGYUN.Abp.FileManagement.Domain.Shared.csproj", "{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE}" 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", "{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain", "modules\file-management\LINGYUN.Abp.FileManagement.Domain\LINGYUN.Abp.FileManagement.Domain.csproj", "{D6D4C667-B58C-4266-9929-AFE54C8F0FBA}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj", "{D6D4C667-B58C-4266-9929-AFE54C8F0FBA}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Application.Contracts", "modules\file-management\LINGYUN.Abp.FileManagement.Application.Contracts\LINGYUN.Abp.FileManagement.Application.Contracts.csproj", "{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D}" 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", "{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Application", "modules\file-management\LINGYUN.Abp.FileManagement.Application\LINGYUN.Abp.FileManagement.Application.csproj", "{1C3A25AF-9A59-4532-88A4-E57BECFA7E96}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application", "modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj", "{1C3A25AF-9A59-4532-88A4-E57BECFA7E96}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.HttpApi", "modules\file-management\LINGYUN.Abp.FileManagement.HttpApi\LINGYUN.Abp.FileManagement.HttpApi.csproj", "{C616C167-E5DF-4141-98BE-F98C58890122}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{C616C167-E5DF-4141-98BE-F98C58890122}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{8CDB2F58-9541-4FB2-8A37-079C5E6A1689}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{8CDB2F58-9541-4FB2-8A37-079C5E6A1689}"
EndProject EndProject
@ -45,9 +45,31 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "te
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.EntityFrameworkCore.Tests\LINGYUN.Abp.EntityFrameworkCore.Tests.csproj", "{B2C0271C-3FE6-4C45-B162-4DE00E542A55}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.EntityFrameworkCore.Tests\LINGYUN.Abp.EntityFrameworkCore.Tests.csproj", "{B2C0271C-3FE6-4C45-B162-4DE00E542A55}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.EntityFrameworkCore.Tests", "tests\LINGYUN.Platform.EntityFrameworkCore.Tests\LINGYUN.Platform.EntityFrameworkCore.Tests.csproj", "{263C49A9-34B9-449B-ABBC-D328210C023D}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.EntityFrameworkCore.Tests", "tests\LINGYUN.Platform.EntityFrameworkCore.Tests\LINGYUN.Platform.EntityFrameworkCore.Tests.csproj", "{263C49A9-34B9-449B-ABBC-D328210C023D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.Domain.Tests", "tests\LINGYUN.Platform.Domain.Tests\LINGYUN.Platform.Domain.Tests.csproj", "{C60A06F2-0F4C-483F-BE2B-B103F0D726CE}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain.Tests", "tests\LINGYUN.Platform.Domain.Tests\LINGYUN.Platform.Domain.Tests.csproj", "{C60A06F2-0F4C-483F-BE2B-B103F0D726CE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.Aliyun", "modules\oss-management\LINGYUN.Abp.OssManagement.Aliyun\LINGYUN.Abp.OssManagement.Aliyun.csproj", "{104EDC09-0CEA-4AB0-BFF5-B009D4679419}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{265D5E44-682B-49BC-984A-BDD8CA45E60E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun", "modules\cloud-aliyun\LINGYUN.Abp.Aliyun\LINGYUN.Abp.Aliyun.csproj", "{8A393F7F-85A2-48ED-9B56-9CEFF3BDE34A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun", "modules\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj", "{95E0D070-ACFB-40DF-A4EC-FC75EA5AF6B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{B5569DCD-445E-445B-87E7-D8D4E03F0F76}"
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", "{1AA232B1-5999-43AE-A5C8-7973AFCC8BD1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{D121A3CF-7A7F-4349-ACCA-BED9433AFFEC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "modules\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{644F2582-D655-43B5-9EA4-D010C94B33AF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "setting-management", "setting-management", "{3855CE63-91CF-4F96-97F6-BEAB444B25CB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "modules\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{D1D288D1-3178-439F-8EFD-E29D6F66E673}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{07D1B07A-3C95-40A8-AA53-619EC067FD45}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -123,6 +145,42 @@ Global
{C60A06F2-0F4C-483F-BE2B-B103F0D726CE}.Debug|Any CPU.Build.0 = Debug|Any CPU {C60A06F2-0F4C-483F-BE2B-B103F0D726CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C60A06F2-0F4C-483F-BE2B-B103F0D726CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {C60A06F2-0F4C-483F-BE2B-B103F0D726CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C60A06F2-0F4C-483F-BE2B-B103F0D726CE}.Release|Any CPU.Build.0 = Release|Any CPU {C60A06F2-0F4C-483F-BE2B-B103F0D726CE}.Release|Any CPU.Build.0 = Release|Any CPU
{104EDC09-0CEA-4AB0-BFF5-B009D4679419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{104EDC09-0CEA-4AB0-BFF5-B009D4679419}.Debug|Any CPU.Build.0 = Debug|Any CPU
{104EDC09-0CEA-4AB0-BFF5-B009D4679419}.Release|Any CPU.ActiveCfg = Release|Any CPU
{104EDC09-0CEA-4AB0-BFF5-B009D4679419}.Release|Any CPU.Build.0 = Release|Any CPU
{8A393F7F-85A2-48ED-9B56-9CEFF3BDE34A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8A393F7F-85A2-48ED-9B56-9CEFF3BDE34A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A393F7F-85A2-48ED-9B56-9CEFF3BDE34A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A393F7F-85A2-48ED-9B56-9CEFF3BDE34A}.Release|Any CPU.Build.0 = Release|Any CPU
{95E0D070-ACFB-40DF-A4EC-FC75EA5AF6B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{95E0D070-ACFB-40DF-A4EC-FC75EA5AF6B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95E0D070-ACFB-40DF-A4EC-FC75EA5AF6B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{95E0D070-ACFB-40DF-A4EC-FC75EA5AF6B0}.Release|Any CPU.Build.0 = Release|Any CPU
{B5569DCD-445E-445B-87E7-D8D4E03F0F76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B5569DCD-445E-445B-87E7-D8D4E03F0F76}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B5569DCD-445E-445B-87E7-D8D4E03F0F76}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5569DCD-445E-445B-87E7-D8D4E03F0F76}.Release|Any CPU.Build.0 = Release|Any CPU
{1AA232B1-5999-43AE-A5C8-7973AFCC8BD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1AA232B1-5999-43AE-A5C8-7973AFCC8BD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1AA232B1-5999-43AE-A5C8-7973AFCC8BD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1AA232B1-5999-43AE-A5C8-7973AFCC8BD1}.Release|Any CPU.Build.0 = Release|Any CPU
{D121A3CF-7A7F-4349-ACCA-BED9433AFFEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D121A3CF-7A7F-4349-ACCA-BED9433AFFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D121A3CF-7A7F-4349-ACCA-BED9433AFFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D121A3CF-7A7F-4349-ACCA-BED9433AFFEC}.Release|Any CPU.Build.0 = Release|Any CPU
{644F2582-D655-43B5-9EA4-D010C94B33AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{644F2582-D655-43B5-9EA4-D010C94B33AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{644F2582-D655-43B5-9EA4-D010C94B33AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{644F2582-D655-43B5-9EA4-D010C94B33AF}.Release|Any CPU.Build.0 = Release|Any CPU
{D1D288D1-3178-439F-8EFD-E29D6F66E673}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1D288D1-3178-439F-8EFD-E29D6F66E673}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1D288D1-3178-439F-8EFD-E29D6F66E673}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1D288D1-3178-439F-8EFD-E29D6F66E673}.Release|Any CPU.Build.0 = Release|Any CPU
{07D1B07A-3C95-40A8-AA53-619EC067FD45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07D1B07A-3C95-40A8-AA53-619EC067FD45}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07D1B07A-3C95-40A8-AA53-619EC067FD45}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07D1B07A-3C95-40A8-AA53-619EC067FD45}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -148,6 +206,17 @@ Global
{B2C0271C-3FE6-4C45-B162-4DE00E542A55} = {CCEFF583-4EEE-433F-8568-9E64166B41FE} {B2C0271C-3FE6-4C45-B162-4DE00E542A55} = {CCEFF583-4EEE-433F-8568-9E64166B41FE}
{263C49A9-34B9-449B-ABBC-D328210C023D} = {CCEFF583-4EEE-433F-8568-9E64166B41FE} {263C49A9-34B9-449B-ABBC-D328210C023D} = {CCEFF583-4EEE-433F-8568-9E64166B41FE}
{C60A06F2-0F4C-483F-BE2B-B103F0D726CE} = {CCEFF583-4EEE-433F-8568-9E64166B41FE} {C60A06F2-0F4C-483F-BE2B-B103F0D726CE} = {CCEFF583-4EEE-433F-8568-9E64166B41FE}
{104EDC09-0CEA-4AB0-BFF5-B009D4679419} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
{265D5E44-682B-49BC-984A-BDD8CA45E60E} = {15BDA03E-DE8E-46E4-96A8-CA3F2872E812}
{8A393F7F-85A2-48ED-9B56-9CEFF3BDE34A} = {265D5E44-682B-49BC-984A-BDD8CA45E60E}
{95E0D070-ACFB-40DF-A4EC-FC75EA5AF6B0} = {265D5E44-682B-49BC-984A-BDD8CA45E60E}
{B5569DCD-445E-445B-87E7-D8D4E03F0F76} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
{1AA232B1-5999-43AE-A5C8-7973AFCC8BD1} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
{D121A3CF-7A7F-4349-ACCA-BED9433AFFEC} = {265D5E44-682B-49BC-984A-BDD8CA45E60E}
{644F2582-D655-43B5-9EA4-D010C94B33AF} = {265D5E44-682B-49BC-984A-BDD8CA45E60E}
{3855CE63-91CF-4F96-97F6-BEAB444B25CB} = {15BDA03E-DE8E-46E4-96A8-CA3F2872E812}
{D1D288D1-3178-439F-8EFD-E29D6F66E673} = {3855CE63-91CF-4F96-97F6-BEAB444B25CB}
{07D1B07A-3C95-40A8-AA53-619EC067FD45} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {03D3B66F-8926-4C00-B7AB-A21761EC859E} SolutionGuid = {03D3B66F-8926-4C00-B7AB-A21761EC859E}

33
aspnet-core/database/ApiGateway-Init-SqlServer.sql

File diff suppressed because one or more lines are too long

212
aspnet-core/database/ApiGateway-Init.sql

@ -11,7 +11,7 @@
Target Server Version : 80020 Target Server Version : 80020
File Encoding : 65001 File Encoding : 65001
Date: 22/12/2020 14:45:05 Date: 11/03/2021 17:43:45
*/ */
SET NAMES utf8mb4; SET NAMES utf8mb4;
@ -62,8 +62,8 @@ CREATE TABLE `appapigatewayaggregate` (
INSERT INTO `appapigatewayaggregate` VALUES (5, '{}', 'db569f15577848568bee9616d6b8b53c', 'TEST-APP', 'abp接口代理服务', 1263083077348196352, 'platform-api-definition,backend-admin-api-definition,messages-api-definition,apigateway-api-definition,identity-server-api-definition,', '/api/abp/api-definition', '', 1, 'AbpApiDefinitionAggregator', NULL, ''); INSERT INTO `appapigatewayaggregate` VALUES (5, '{}', 'db569f15577848568bee9616d6b8b53c', 'TEST-APP', 'abp接口代理服务', 1263083077348196352, 'platform-api-definition,backend-admin-api-definition,messages-api-definition,apigateway-api-definition,identity-server-api-definition,', '/api/abp/api-definition', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
INSERT INTO `appapigatewayaggregate` VALUES (6, '{}', '870a2c5df9b34f8c9514aef0250fbb47', 'TEST-APP', 'abp框架配置', 1263102116090970112, 'apigateway-configuration,platform-configuration,backend-admin-configuration,messages-configuration,identity-server-configuration,', '/api/abp/application-configuration', '', 1, 'AbpApiDefinitionAggregator', NULL, ''); INSERT INTO `appapigatewayaggregate` VALUES (6, '{}', '870a2c5df9b34f8c9514aef0250fbb47', 'TEST-APP', 'abp框架配置', 1263102116090970112, 'apigateway-configuration,platform-configuration,backend-admin-configuration,messages-configuration,identity-server-configuration,', '/api/abp/application-configuration', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
INSERT INTO `appapigatewayaggregate` VALUES (8, '{}', 'edc962f7e0844bb09cb0fb731f358b4b', 'TEST-APP', '我的消息订阅', 1322503807309881344, 'assignables-notifilers,my-subscribes,', '/api/my-subscribes/assignables-notifilers', '', 1, 'AbpApiDefinitionAggregator', NULL, ''); INSERT INTO `appapigatewayaggregate` VALUES (8, '{}', 'edc962f7e0844bb09cb0fb731f358b4b', 'TEST-APP', '我的消息订阅', 1322503807309881344, 'assignables-notifilers,my-subscribes,', '/api/my-subscribes/assignables-notifilers', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
INSERT INTO `appapigatewayaggregate` VALUES (9, '{}', 'dbfc4b5972034e8ba875551fa8dd29a1', 'TEST-APP', '全局设置', 1329708867127799808, 'setting-global,wechat-setting-global,', '/api/setting-management/settings/by-global', '', 1, 'AbpApiDefinitionAggregator', NULL, ''); INSERT INTO `appapigatewayaggregate` VALUES (9, '{}', 'c65227b8a0e143b2a0b6186ffde3dfc1', 'TEST-APP', '全局设置', 1329708867127799808, 'setting-global,wechat-setting-global,aliyun-setting-global,oss-management-global,', '/api/setting-management/settings/by-global', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
INSERT INTO `appapigatewayaggregate` VALUES (10, '{}', '2035b334da4b450eaa3f0c4c54998d8b', 'TEST-APP', '当前租户设置', 1329709265255329792, 'setting-current-tenant,wechat-setting-current-tenant,', '/api/setting-management/settings/by-current-tenant', '', 1, 'AbpApiDefinitionAggregator', NULL, ''); INSERT INTO `appapigatewayaggregate` VALUES (10, '{}', '29fb4cbfcdfe41478b931df8c549992b', 'TEST-APP', '当前租户设置', 1329709265255329792, 'setting-current-tenant,wechat-setting-current-tenant,aliyun-setting-current-tenant,oss-management-current-tenant,', '/api/setting-management/settings/by-current-tenant', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewayaggregateconfig -- Table structure for appapigatewayaggregateconfig
@ -93,7 +93,7 @@ CREATE TABLE `appapigatewayauthoptions` (
PRIMARY KEY (`Id`) USING BTREE, PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayAuthOptions_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `IX_AppApiGatewayAuthOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayAuthOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT CONSTRAINT `FK_AppApiGatewayAuthOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 176 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 191 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewayauthoptions -- Records of appapigatewayauthoptions
@ -169,14 +169,6 @@ INSERT INTO `appapigatewayauthoptions` VALUES (101, 1290849478956199936, '', '')
INSERT INTO `appapigatewayauthoptions` VALUES (102, 1290849628051124224, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (102, 1290849628051124224, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (103, 1290849798553776128, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (103, 1290849798553776128, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (105, 1291259822512693248, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (105, 1291259822512693248, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (106, 1292620505149145088, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (107, 1292620665505775616, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (108, 1292620843398791168, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (109, 1292621027574874112, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (110, 1292621363161137152, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (111, 1292621494837116928, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (112, 1292621629260365824, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (113, 1292622526073864192, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (114, 1293470838745821184, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (114, 1293470838745821184, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (115, 1293471661785706496, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (115, 1293471661785706496, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (116, 1293472678392721408, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (116, 1293472678392721408, '', '');
@ -239,6 +231,21 @@ INSERT INTO `appapigatewayauthoptions` VALUES (172, 1336230645078921216, '', '')
INSERT INTO `appapigatewayauthoptions` VALUES (173, 1337314809113722880, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (173, 1337314809113722880, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (174, 1337314938973569024, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (174, 1337314938973569024, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (175, 1340961907637243904, '', ''); INSERT INTO `appapigatewayauthoptions` VALUES (175, 1340961907637243904, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (176, 1341652247554379776, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (177, 1341652385555369984, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (178, 1342457939827552256, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (179, 1342458050112581632, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (180, 1363382062055915520, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (181, 1363382298501414912, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (182, 1368854800347848704, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (183, 1368855936576413696, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (184, 1368856295889854464, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (185, 1368856703572008960, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (186, 1368856819242524672, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (187, 1368856927887581184, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (188, 1368857128383700992, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (189, 1369560306297233408, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (190, 1369560450472239104, '', '');
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewaybalanceroptions -- Table structure for appapigatewaybalanceroptions
@ -256,7 +263,7 @@ CREATE TABLE `appapigatewaybalanceroptions` (
UNIQUE INDEX `IX_AppApiGatewayBalancerOptions_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `IX_AppApiGatewayBalancerOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayGlobalConfiguratio~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayGlobalConfiguratio~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 179 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 194 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewaybalanceroptions -- Records of appapigatewaybalanceroptions
@ -333,14 +340,6 @@ INSERT INTO `appapigatewaybalanceroptions` VALUES (104, NULL, 129084947895619993
INSERT INTO `appapigatewaybalanceroptions` VALUES (105, NULL, 1290849628051124224, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (105, NULL, 1290849628051124224, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (106, NULL, 1290849798553776128, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (106, NULL, 1290849798553776128, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (108, NULL, 1291259822512693248, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (108, NULL, 1291259822512693248, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (109, NULL, 1292620505149145088, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (110, NULL, 1292620665505775616, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (111, NULL, 1292620843398791168, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (112, NULL, 1292621027574874112, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (113, NULL, 1292621363161137152, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (114, NULL, 1292621494837116928, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (115, NULL, 1292621629260365824, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (116, NULL, 1292622526073864192, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (117, NULL, 1293470838745821184, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (117, NULL, 1293470838745821184, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (118, NULL, 1293471661785706496, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (118, NULL, 1293471661785706496, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (119, NULL, 1293472678392721408, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (119, NULL, 1293472678392721408, '', '', 0);
@ -403,6 +402,21 @@ INSERT INTO `appapigatewaybalanceroptions` VALUES (175, NULL, 133623064507892121
INSERT INTO `appapigatewaybalanceroptions` VALUES (176, NULL, 1337314809113722880, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (176, NULL, 1337314809113722880, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (177, NULL, 1337314938973569024, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (177, NULL, 1337314938973569024, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (178, NULL, 1340961907637243904, '', '', 0); INSERT INTO `appapigatewaybalanceroptions` VALUES (178, NULL, 1340961907637243904, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (179, NULL, 1341652247554379776, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (180, NULL, 1341652385555369984, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (181, NULL, 1342457939827552256, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (182, NULL, 1342458050112581632, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (183, NULL, 1363382062055915520, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (184, NULL, 1363382298501414912, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (185, NULL, 1368854800347848704, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (186, NULL, 1368855936576413696, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (187, NULL, 1368856295889854464, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (188, NULL, 1368856703572008960, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (189, NULL, 1368856819242524672, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (190, NULL, 1368856927887581184, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (191, NULL, 1368857128383700992, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (192, NULL, 1369560306297233408, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (193, NULL, 1369560450472239104, '', '', 0);
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewaycacheoptions -- Table structure for appapigatewaycacheoptions
@ -416,7 +430,7 @@ CREATE TABLE `appapigatewaycacheoptions` (
PRIMARY KEY (`Id`) USING BTREE, PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayCacheOptions_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `IX_AppApiGatewayCacheOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayCacheOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT CONSTRAINT `FK_AppApiGatewayCacheOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 176 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 191 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewaycacheoptions -- Records of appapigatewaycacheoptions
@ -492,14 +506,6 @@ INSERT INTO `appapigatewaycacheoptions` VALUES (101, 1290849478956199936, NULL,
INSERT INTO `appapigatewaycacheoptions` VALUES (102, 1290849628051124224, NULL, NULL); INSERT INTO `appapigatewaycacheoptions` VALUES (102, 1290849628051124224, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (103, 1290849798553776128, NULL, NULL); INSERT INTO `appapigatewaycacheoptions` VALUES (103, 1290849798553776128, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (105, 1291259822512693248, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (105, 1291259822512693248, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (106, 1292620505149145088, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (107, 1292620665505775616, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (108, 1292620843398791168, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (109, 1292621027574874112, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (110, 1292621363161137152, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (111, 1292621494837116928, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (112, 1292621629260365824, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (113, 1292622526073864192, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (114, 1293470838745821184, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (114, 1293470838745821184, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (115, 1293471661785706496, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (115, 1293471661785706496, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (116, 1293472678392721408, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (116, 1293472678392721408, 0, '');
@ -562,6 +568,21 @@ INSERT INTO `appapigatewaycacheoptions` VALUES (172, 1336230645078921216, 0, '')
INSERT INTO `appapigatewaycacheoptions` VALUES (173, 1337314809113722880, NULL, NULL); INSERT INTO `appapigatewaycacheoptions` VALUES (173, 1337314809113722880, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (174, 1337314938973569024, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (174, 1337314938973569024, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (175, 1340961907637243904, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (175, 1340961907637243904, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (176, 1341652247554379776, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (177, 1341652385555369984, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (178, 1342457939827552256, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (179, 1342458050112581632, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (180, 1363382062055915520, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (181, 1363382298501414912, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (182, 1368854800347848704, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (183, 1368855936576413696, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (184, 1368856295889854464, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (185, 1368856703572008960, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (186, 1368856819242524672, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (187, 1368856927887581184, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (188, 1368857128383700992, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (189, 1369560306297233408, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (190, 1369560450472239104, 0, '');
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewaydiscovery -- Table structure for appapigatewaydiscovery
@ -671,7 +692,7 @@ CREATE TABLE `appapigatewayhttpoptions` (
UNIQUE INDEX `IX_AppApiGatewayHttpOptions_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `IX_AppApiGatewayHttpOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayGlobalConfiguration_It~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayGlobalConfiguration_It~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 179 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 194 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewayhttpoptions -- Records of appapigatewayhttpoptions
@ -748,14 +769,6 @@ INSERT INTO `appapigatewayhttpoptions` VALUES (104, NULL, 1290849478956199936, 0
INSERT INTO `appapigatewayhttpoptions` VALUES (105, NULL, 1290849628051124224, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (105, NULL, 1290849628051124224, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (106, NULL, 1290849798553776128, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (106, NULL, 1290849798553776128, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (108, NULL, 1291259822512693248, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (108, NULL, 1291259822512693248, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (109, NULL, 1292620505149145088, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (110, NULL, 1292620665505775616, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (111, NULL, 1292620843398791168, 100, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (112, NULL, 1292621027574874112, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (113, NULL, 1292621363161137152, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (114, NULL, 1292621494837116928, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (115, NULL, 1292621629260365824, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (116, NULL, 1292622526073864192, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (117, NULL, 1293470838745821184, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (117, NULL, 1293470838745821184, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (118, NULL, 1293471661785706496, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (118, NULL, 1293471661785706496, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (119, NULL, 1293472678392721408, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (119, NULL, 1293472678392721408, 0, 0, 0, 0, 0);
@ -818,6 +831,21 @@ INSERT INTO `appapigatewayhttpoptions` VALUES (175, NULL, 1336230645078921216, 0
INSERT INTO `appapigatewayhttpoptions` VALUES (176, NULL, 1337314809113722880, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (176, NULL, 1337314809113722880, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (177, NULL, 1337314938973569024, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (177, NULL, 1337314938973569024, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (178, NULL, 1340961907637243904, 0, 0, 0, 0, 0); INSERT INTO `appapigatewayhttpoptions` VALUES (178, NULL, 1340961907637243904, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (179, NULL, 1341652247554379776, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (180, NULL, 1341652385555369984, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (181, NULL, 1342457939827552256, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (182, NULL, 1342458050112581632, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (183, NULL, 1363382062055915520, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (184, NULL, 1363382298501414912, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (185, NULL, 1368854800347848704, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (186, NULL, 1368855936576413696, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (187, NULL, 1368856295889854464, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (188, NULL, 1368856703572008960, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (189, NULL, 1368856819242524672, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (190, NULL, 1368856927887581184, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (191, NULL, 1368857128383700992, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (192, NULL, 1369560306297233408, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (193, NULL, 1369560450472239104, 0, 0, 0, 0, 0);
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewayqosoptions -- Table structure for appapigatewayqosoptions
@ -835,7 +863,7 @@ CREATE TABLE `appapigatewayqosoptions` (
UNIQUE INDEX `IX_AppApiGatewayQoSOptions_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `IX_AppApiGatewayQoSOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayGlobalConfiguration_Ite~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayGlobalConfiguration_Ite~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 179 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 194 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewayqosoptions -- Records of appapigatewayqosoptions
@ -912,14 +940,6 @@ INSERT INTO `appapigatewayqosoptions` VALUES (104, NULL, 1290849478956199936, 50
INSERT INTO `appapigatewayqosoptions` VALUES (105, NULL, 1290849628051124224, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (105, NULL, 1290849628051124224, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (106, NULL, 1290849798553776128, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (106, NULL, 1290849798553776128, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (108, NULL, 1291259822512693248, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (108, NULL, 1291259822512693248, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (109, NULL, 1292620505149145088, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (110, NULL, 1292620665505775616, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (111, NULL, 1292620843398791168, 50, 60000, 1200000);
INSERT INTO `appapigatewayqosoptions` VALUES (112, NULL, 1292621027574874112, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (113, NULL, 1292621363161137152, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (114, NULL, 1292621494837116928, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (115, NULL, 1292621629260365824, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (116, NULL, 1292622526073864192, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (117, NULL, 1293470838745821184, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (117, NULL, 1293470838745821184, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (118, NULL, 1293471661785706496, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (118, NULL, 1293471661785706496, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (119, NULL, 1293472678392721408, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (119, NULL, 1293472678392721408, 50, 60000, 30000);
@ -982,6 +1002,21 @@ INSERT INTO `appapigatewayqosoptions` VALUES (175, NULL, 1336230645078921216, 50
INSERT INTO `appapigatewayqosoptions` VALUES (176, NULL, 1337314809113722880, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (176, NULL, 1337314809113722880, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (177, NULL, 1337314938973569024, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (177, NULL, 1337314938973569024, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (178, NULL, 1340961907637243904, 50, 60000, 30000); INSERT INTO `appapigatewayqosoptions` VALUES (178, NULL, 1340961907637243904, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (179, NULL, 1341652247554379776, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (180, NULL, 1341652385555369984, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (181, NULL, 1342457939827552256, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (182, NULL, 1342458050112581632, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (183, NULL, 1363382062055915520, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (184, NULL, 1363382298501414912, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (185, NULL, 1368854800347848704, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (186, NULL, 1368855936576413696, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (187, NULL, 1368856295889854464, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (188, NULL, 1368856703572008960, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (189, NULL, 1368856819242524672, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (190, NULL, 1368856927887581184, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (191, NULL, 1368857128383700992, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (192, NULL, 1369560306297233408, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (193, NULL, 1369560450472239104, 50, 60000, 30000);
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewayratelimitoptions -- Table structure for appapigatewayratelimitoptions
@ -1023,7 +1058,7 @@ CREATE TABLE `appapigatewayratelimitrule` (
UNIQUE INDEX `IX_AppApiGatewayRateLimitRule_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `IX_AppApiGatewayRateLimitRule_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayDynamicReRoute_Dynam~` FOREIGN KEY (`DynamicReRouteId`) REFERENCES `appapigatewaydynamicreroute` (`DynamicReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayDynamicReRoute_Dynam~` FOREIGN KEY (`DynamicReRouteId`) REFERENCES `appapigatewaydynamicreroute` (`DynamicReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 176 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 191 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewayratelimitrule -- Records of appapigatewayratelimitrule
@ -1099,14 +1134,6 @@ INSERT INTO `appapigatewayratelimitrule` VALUES (101, 1290849478956199936, NULL,
INSERT INTO `appapigatewayratelimitrule` VALUES (102, 1290849628051124224, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (102, 1290849628051124224, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (103, 1290849798553776128, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (103, 1290849798553776128, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (105, 1291259822512693248, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (105, 1291259822512693248, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (106, 1292620505149145088, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (107, 1292620665505775616, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (108, 1292620843398791168, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (109, 1292621027574874112, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (110, 1292621363161137152, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (111, 1292621494837116928, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (112, 1292621629260365824, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (113, 1292622526073864192, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (114, 1293470838745821184, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (114, 1293470838745821184, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (115, 1293471661785706496, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (115, 1293471661785706496, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (116, 1293472678392721408, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (116, 1293472678392721408, NULL, '', 0, NULL, NULL, NULL);
@ -1169,6 +1196,21 @@ INSERT INTO `appapigatewayratelimitrule` VALUES (172, 1336230645078921216, NULL,
INSERT INTO `appapigatewayratelimitrule` VALUES (173, 1337314809113722880, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (173, 1337314809113722880, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (174, 1337314938973569024, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (174, 1337314938973569024, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (175, 1340961907637243904, NULL, '', 0, NULL, NULL, NULL); INSERT INTO `appapigatewayratelimitrule` VALUES (175, 1340961907637243904, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (176, 1341652247554379776, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (177, 1341652385555369984, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (178, 1342457939827552256, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (179, 1342458050112581632, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (180, 1363382062055915520, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (181, 1363382298501414912, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (182, 1368854800347848704, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (183, 1368855936576413696, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (184, 1368856295889854464, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (185, 1368856703572008960, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (186, 1368856819242524672, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (187, 1368856927887581184, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (188, 1368857128383700992, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (189, 1369560306297233408, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (190, 1369560450472239104, NULL, '', 0, NULL, NULL, NULL);
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewayreroute -- Table structure for appapigatewayreroute
@ -1208,7 +1250,7 @@ CREATE TABLE `appapigatewayreroute` (
PRIMARY KEY (`Id`) USING BTREE, PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `AK_AppApiGatewayReRoute_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `AK_AppApiGatewayReRoute_ReRouteId`(`ReRouteId`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayReRoute_AppId_DownstreamPathTemplate_UpstreamPa~`(`AppId`, `DownstreamPathTemplate`, `UpstreamPathTemplate`) USING BTREE UNIQUE INDEX `IX_AppApiGatewayReRoute_AppId_DownstreamPathTemplate_UpstreamPa~`(`AppId`, `DownstreamPathTemplate`, `UpstreamPathTemplate`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 183 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 198 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewayreroute -- Records of appapigatewayreroute
@ -1284,14 +1326,6 @@ INSERT INTO `appapigatewayreroute` VALUES (108, '{}', '9362040d10a94fb991f60bc39
INSERT INTO `appapigatewayreroute` VALUES (109, '{}', 'a7df3a04805d4cc8a6e6b3823c6dd468', 1290849628051124224, '【后台管理】- 用户设置', '/api/setting-management/settings/by-user/{userId}', '', '', '/api/setting-management/settings/by-user/{userId}', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (109, '{}', 'a7df3a04805d4cc8a6e6b3823c6dd468', 1290849628051124224, '【后台管理】- 用户设置', '/api/setting-management/settings/by-user/{userId}', '', '', '/api/setting-management/settings/by-user/{userId}', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (110, '{}', 'ef6e38a529a345fab67f6a627cf20635', 1290849798553776128, '【后台管理】- 当前用户设置', '/api/setting-management/settings/by-current-user', '', '', '/api/setting-management/settings/by-current-user', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (110, '{}', 'ef6e38a529a345fab67f6a627cf20635', 1290849798553776128, '【后台管理】- 当前用户设置', '/api/setting-management/settings/by-current-user', '', '', '/api/setting-management/settings/by-current-user', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (112, '{}', '9844fed6507844f2ac64bd08649bd3a6', 1291259822512693248, '【身份认证服务】- 查询组织机构根节点', '/api/identity/organization-units/root-node', '', '', '/api/identity/organization-units/root-node', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (112, '{}', '9844fed6507844f2ac64bd08649bd3a6', 1291259822512693248, '【身份认证服务】- 查询组织机构根节点', '/api/identity/organization-units/root-node', '', '', '/api/identity/organization-units/root-node', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (113, '{}', '24d8794cf8f943b4ac45d2bcccf7c128', 1292620505149145088, '【平台服务】- 文件系统', '/api/file-management/file-system', '', '', '/api/file-management/file-system', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (114, '{}', '0acf6762d3af43efb655107e0039f5fc', 1292620665505775616, '【平台服务】- 文件系统 - 目录管理', '/api/file-management/file-system/folders', '', '', '/api/file-management/file-system/folders', 'POST,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (115, '{}', '8b4363f70865419089b5f62ba35382df', 1292620843398791168, '【平台服务】- 文件系统 - 文件管理', '/api/file-management/file-system/files', '', '', '/api/file-management/file-system/files', 'GET,POST,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 1200000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (116, '{}', '7eb315567bbc470bbbfd26923c5d0aba', 1292621027574874112, '【平台服务】- 文件系统 - 复制目录', '/api/file-management/file-system/folders/copy', '', '', '/api/file-management/file-system/folders/copy', 'PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (117, '{}', 'af5853680cff454fa66ff6022f18da23', 1292621363161137152, '【平台服务】- 文件系统 - 移动目录', '/api/file-management/file-system/folders/move', '', '', '/api/file-management/file-system/folders/move', 'PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (118, '{}', '6daa6d8c8adb466899988fd8181c29a8', 1292621494837116928, '【平台服务】- 文件系统 - 复制文件', '/api/file-management/file-system/files/copy', '', '', '/api/file-management/file-system/files/copy', 'PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (119, '{}', '9560caaa3bd9424984c44724aa54bfe9', 1292621629260365824, '【平台服务】- 文件系统 - 移动文件', '/api/file-management/file-system/files/move', '', '', '/api/file-management/file-system/files/move', 'PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (120, '{}', 'fc2aaa6035484201b9014912930fb7cb', 1292622526073864192, '【平台服务】- 文件系统 - 详情页', '/api/file-management/file-system/profile', '', '', '/api/file-management/file-system/profile', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (121, '{}', 'c6c7b027000942dda8ba0d2e2d8cf705', 1293470838745821184, '【后台管理】- 框架配置', '/api/abp/application-configuration', '', '', '/api/abp/backend-admin/application-configuration', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'backend-admin-configuration', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (121, '{}', 'c6c7b027000942dda8ba0d2e2d8cf705', 1293470838745821184, '【后台管理】- 框架配置', '/api/abp/application-configuration', '', '', '/api/abp/backend-admin/application-configuration', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'backend-admin-configuration', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (122, '{}', 'becd4342079d4399abda5b5ba3b46fdc', 1293471661785706496, '【消息服务】- 框架配置', '/api/abp/application-configuration', '', '', '/api/abp/messages/application-configuration', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', 'messages-configuration', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (122, '{}', 'becd4342079d4399abda5b5ba3b46fdc', 1293471661785706496, '【消息服务】- 框架配置', '/api/abp/application-configuration', '', '', '/api/abp/messages/application-configuration', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', 'messages-configuration', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (123, '{}', 'c828140cee3043c18ffc274f6461f0f2', 1293472678392721408, '【后台管理】- 接口代理', '/api/abp/api-definition', '', '', '/api/abp/backend-admin/api-definition', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'backend-admin-api-definition', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (123, '{}', 'c828140cee3043c18ffc274f6461f0f2', 1293472678392721408, '【后台管理】- 接口代理', '/api/abp/api-definition', '', '', '/api/abp/backend-admin/api-definition', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'backend-admin-api-definition', 0, 30000, 1, '', 'TEST-APP');
@ -1354,6 +1388,21 @@ INSERT INTO `appapigatewayreroute` VALUES (179, '{}', '70d6120e560f41c3879ec4549
INSERT INTO `appapigatewayreroute` VALUES (180, '{}', 'c67549cd6cd246f08d9f6ce93c906c21', 1337314809113722880, '【平台服务】- 布局', '/api/platform/layouts', '', '', '/api/platform/layouts', 'GET,POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (180, '{}', 'c67549cd6cd246f08d9f6ce93c906c21', 1337314809113722880, '【平台服务】- 布局', '/api/platform/layouts', '', '', '/api/platform/layouts', 'GET,POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (181, '{}', 'bacca946a092434cb2ee5994c88f2c33', 1337314938973569024, '【平台服务】- 管理布局', '/api/platform/layouts/{id}', '', '', '/api/platform/layouts/{id}', 'GET,DELETE,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (181, '{}', 'bacca946a092434cb2ee5994c88f2c33', 1337314938973569024, '【平台服务】- 管理布局', '/api/platform/layouts/{id}', '', '', '/api/platform/layouts/{id}', 'GET,DELETE,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (182, '{}', '741fdd4cc05a4025a9073a2e1ab9d5ea', 1340961907637243904, '【平台服务】- 获取所有布局', '/api/platform/layouts/all', '', '', '/api/platform/layouts/all', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (182, '{}', '741fdd4cc05a4025a9073a2e1ab9d5ea', 1340961907637243904, '【平台服务】- 获取所有布局', '/api/platform/layouts/all', '', '', '/api/platform/layouts/all', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (183, '{}', '26a1ef4016704dab8c254f90bc26ecfe', 1341652247554379776, '【身份认证服务】- Api范围', '/api/identity-server/api-scopes', '', '', '/api/identity-server/api-scopes', 'GET,POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (184, '{}', '3bfc1fef7f5446638f91c9b6e2fb12db', 1341652385555369984, '【身份认证服务】- 管理Api范围', '/api/identity-server/api-scopes/{id}', '', '', '/api/identity-server/api-scopes/{id}', 'GET,PUT,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (185, '{}', '3288c25dd61e491db95313ca72016918', 1342457939827552256, '【身份认证服务】- 持久授权', '/api/identity-server/persisted-grants', '', '', '/api/identity-server/persisted-grants', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (186, '{}', '23f94678093148f58ba842096c3a0e39', 1342458050112581632, '【身份认证服务】- 管理持久授权', '/api/identity-server/persisted-grants/{id}', '', '', '/api/identity-server/persisted-grants/{id}', 'GET,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (187, '{}', '1f61a3e35b374277ae2c13c671bc5d30', 1363382062055915520, '【阿里云】- 阿里云公共配置', '/api/setting-management/aliyun/by-global', '', '', '/api/setting-management/aliyun/by-global', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'aliyun-setting-global', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (188, '{}', '46001a60f3d54b85a8417f6af24066e5', 1363382298501414912, '【阿里云】- 阿里云租户配置', '/api/setting-management/aliyun/by-current-tenant', '', '', '/api/setting-management/aliyun/by-current-tenant', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'aliyun-setting-current-tenant', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (189, '{}', '0d21bec8bcc044bf9000227663039ef4', 1368854800347848704, '【Oss对象存储】- 管理容器(Bucket)', '/api/oss-management/containes/{name}', '', '', '/api/oss-management/containes/{name}', 'POST,GET,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (190, '{}', 'ca33dc2834e4439d9ca7827fb31c70f8', 1368855936576413696, '【Oss对象存储】- 获取容器列表', '/api/oss-management/containes', '', '', '/api/oss-management/containes', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (191, '{}', 'e00fb37d9757471fbd1e64dca92e5d7d', 1368856295889854464, '【Oss对象存储】- 获取对象列表', '/api/oss-management/containes/objects', '', '', '/api/oss-management/containes/objects', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (192, '{}', 'cef75a4f7eac43789a3e246229fd5a1b', 1368856703572008960, '【Oss对象存储】- 管理Oss对象', '/api/oss-management/objects', '', '', '/api/oss-management/objects', 'GET,POST,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (193, '{}', 'ee0d5e6de17c481ca2c0ee5c156b1973', 1368856819242524672, '【Oss对象存储】- 上传Oss对象', '/api/oss-management/objects/upload', '', '', '/api/oss-management/objects/upload', 'POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (194, '{}', '6c1a0f98129d418cba55a52dbdd88937', 1368856927887581184, '【Oss对象存储】- 批量删除Oss对象', '/api/oss-management/objects/bulk-delete', '', '', '/api/oss-management/objects/bulk-delete', 'DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (195, '{}', 'de285bf4b6114032a45d5611ea8e3101', 1368857128383700992, '【Oss对象存储】- 静态文件管理', '/api/files/static/{everything}', '', '', '/api/files/static/{everything}', 'POST,GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (196, '{}', '6287c30d31c147faae917cb6e52636ec', 1369560306297233408, '【Oss对象存储】- 获取公共配置', '/api/setting-management/oss-management/by-global', '', '', '/api/setting-management/oss-management/by-global', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', 'oss-management-global', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (197, '{}', '1012bb902aba47ada9a374fc73ed2632', 1369560450472239104, '【Oss对象存储】- 获取租户配置', '/api/setting-management/oss-management/by-current-tenant', '', '', '/api/setting-management/oss-management/by-current-tenant', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30025,', '', '', 'oss-management-current-tenant', 0, 30000, 1, '', 'TEST-APP');
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewayroutegroup -- Table structure for appapigatewayroutegroup
@ -1397,7 +1446,7 @@ CREATE TABLE `appapigatewaysecurityoptions` (
PRIMARY KEY (`Id`) USING BTREE, PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewaySecurityOptions_ReRouteId`(`ReRouteId`) USING BTREE, UNIQUE INDEX `IX_AppApiGatewaySecurityOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewaySecurityOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT CONSTRAINT `FK_AppApiGatewaySecurityOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 176 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 191 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of appapigatewaysecurityoptions -- Records of appapigatewaysecurityoptions
@ -1473,14 +1522,6 @@ INSERT INTO `appapigatewaysecurityoptions` VALUES (101, 1290849478956199936, '',
INSERT INTO `appapigatewaysecurityoptions` VALUES (102, 1290849628051124224, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (102, 1290849628051124224, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (103, 1290849798553776128, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (103, 1290849798553776128, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (105, 1291259822512693248, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (105, 1291259822512693248, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (106, 1292620505149145088, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (107, 1292620665505775616, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (108, 1292620843398791168, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (109, 1292621027574874112, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (110, 1292621363161137152, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (111, 1292621494837116928, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (112, 1292621629260365824, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (113, 1292622526073864192, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (114, 1293470838745821184, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (114, 1293470838745821184, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (115, 1293471661785706496, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (115, 1293471661785706496, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (116, 1293472678392721408, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (116, 1293472678392721408, '', '');
@ -1543,6 +1584,21 @@ INSERT INTO `appapigatewaysecurityoptions` VALUES (172, 1336230645078921216, '',
INSERT INTO `appapigatewaysecurityoptions` VALUES (173, 1337314809113722880, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (173, 1337314809113722880, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (174, 1337314938973569024, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (174, 1337314938973569024, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (175, 1340961907637243904, '', ''); INSERT INTO `appapigatewaysecurityoptions` VALUES (175, 1340961907637243904, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (176, 1341652247554379776, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (177, 1341652385555369984, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (178, 1342457939827552256, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (179, 1342458050112581632, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (180, 1363382062055915520, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (181, 1363382298501414912, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (182, 1368854800347848704, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (183, 1368855936576413696, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (184, 1368856295889854464, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (185, 1368856703572008960, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (186, 1368856819242524672, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (187, 1368856927887581184, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (188, 1368857128383700992, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (189, 1369560306297233408, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (190, 1369560450472239104, '', '');
-- ---------------------------- -- ----------------------------
-- Table structure for cap.published -- Table structure for cap.published
@ -1561,12 +1617,6 @@ CREATE TABLE `cap.published` (
INDEX `IX_ExpiresAt`(`ExpiresAt`) USING BTREE INDEX `IX_ExpiresAt`(`ExpiresAt`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of cap.published
-- ----------------------------
INSERT INTO `cap.published` VALUES (1340961909189136384, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1340961909189136384\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/12/21 18:06:47 +08:00\",\"cap-corr-id\":\"1340961909189136384\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-12-21T18:06:47.6668667+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-12-21 18:06:48', '2020-12-22 18:06:48', 'Succeeded');
INSERT INTO `cap.published` VALUES (1341265150657449984, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1341265150657449984\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/12/22 14:11:46 +08:00\",\"cap-corr-id\":\"1341265150657449984\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-12-22T14:11:46.0753073+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-12-22 14:11:46', '2020-12-23 14:11:46', 'Succeeded');
-- ---------------------------- -- ----------------------------
-- Table structure for cap.received -- Table structure for cap.received
-- ---------------------------- -- ----------------------------

2
aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.Mvc.Validation/LINGYUN.Abp.AspNetCore.Mvc.Validation.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\..\common.props" /> <Import Project="..\..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<RootNamespace /> <RootNamespace />
</PropertyGroup> </PropertyGroup>

2
aspnet-core/modules/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN.Abp.BlobStoring.Aliyun.csproj

@ -9,7 +9,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.10.0" /> <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageReference Include="Volo.Abp.BlobStoring" Version="4.2.1" /> <PackageReference Include="Volo.Abp.BlobStoring" Version="4.2.1" />
</ItemGroup> </ItemGroup>

5
aspnet-core/modules/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/IOssClientFactory.cs

@ -5,6 +5,11 @@ namespace LINGYUN.Abp.BlobStoring.Aliyun
{ {
public interface IOssClientFactory public interface IOssClientFactory
{ {
/// <summary>
/// 构建Oss客户端
/// </summary>
/// <returns></returns>
Task<IOss> CreateAsync<TContainer>();
/// <summary> /// <summary>
/// 通过配置信息构建Oss客户端调用 /// 通过配置信息构建Oss客户端调用
/// </summary> /// </summary>

12
aspnet-core/modules/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/OssClientFactory.cs

@ -1,5 +1,7 @@
using Aliyun.OSS; using Aliyun.OSS;
using LINGYUN.Abp.Aliyun; using LINGYUN.Abp.Aliyun;
using System.Threading.Tasks;
using Volo.Abp.BlobStoring;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Settings; using Volo.Abp.Settings;
@ -8,11 +10,21 @@ namespace LINGYUN.Abp.BlobStoring.Aliyun
{ {
public class OssClientFactory : AliyunClientFactory<IOss, AliyunBlobProviderConfiguration>, IOssClientFactory, ITransientDependency public class OssClientFactory : AliyunClientFactory<IOss, AliyunBlobProviderConfiguration>, IOssClientFactory, ITransientDependency
{ {
protected IBlobContainerConfigurationProvider ConfigurationProvider { get; }
public OssClientFactory( public OssClientFactory(
ISettingProvider settingProvider, ISettingProvider settingProvider,
IBlobContainerConfigurationProvider configurationProvider,
IDistributedCache<AliyunBasicSessionCredentialsCacheItem> cache) IDistributedCache<AliyunBasicSessionCredentialsCacheItem> cache)
: base(settingProvider, cache) : base(settingProvider, cache)
{ {
ConfigurationProvider = configurationProvider;
}
public virtual async Task<IOss> CreateAsync<TContainer>()
{
var configuration = ConfigurationProvider.Get<TContainer>();
return await CreateAsync(configuration.GetAliyunConfiguration());
} }
/// <summary> /// <summary>
/// 普通方式构建Oss客户端 /// 普通方式构建Oss客户端

12
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/AbpFileManagementApplicationContractsModule.cs

@ -1,12 +0,0 @@
using Volo.Abp.Application;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.FileManagement
{
[DependsOn(
typeof(AbpFileManagementDomainSharedModule),
typeof(AbpDddApplicationModule))]
public class AbpFileManagementApplicationContractsModule : AbpModule
{
}
}

49
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Features/AbpFileManagementFeatureDefinitionProvider.cs

@ -1,49 +0,0 @@
using LINGYUN.Abp.FileManagement.Localization;
using Volo.Abp.Features;
using Volo.Abp.Localization;
using Volo.Abp.Validation.StringValues;
namespace LINGYUN.Abp.FileManagement.Features
{
public class AbpFileManagementFeatureDefinitionProvider : FeatureDefinitionProvider
{
public override void Define(IFeatureDefinitionContext context)
{
var featureGroup = context.AddGroup(
name: AbpFileManagementFeatureNames.GroupName,
displayName: L("Features:FileManagement"));
var fileSystemFeature = featureGroup.AddFeature(
name: AbpFileManagementFeatureNames.FileSystem.Default,
displayName: L("Features:DisplayName:FileSystem"),
description: L("Features:Description:FileSystem"));
fileSystemFeature.CreateChild(
name: AbpFileManagementFeatureNames.FileSystem.DownloadFile,
defaultValue: false.ToString(),
displayName: L("Features:DisplayName:DownloadFile"),
description: L("Features:Description:DownloadFile"),
valueType: new ToggleStringValueType(new BooleanValueValidator()));
fileSystemFeature.CreateChild(
name: AbpFileManagementFeatureNames.FileSystem.UploadFile,
defaultValue: true.ToString(),
displayName: L("Features:DisplayName:UploadFile"),
description: L("Features:Description:UploadFile"),
valueType: new ToggleStringValueType(new BooleanValueValidator()));
// TODO: 此功能需要控制器协同,暂时不实现
fileSystemFeature.CreateChild(
name: AbpFileManagementFeatureNames.FileSystem.MaxUploadFileCount,
defaultValue: 1.ToString(),
displayName: L("Features:DisplayName:MaxUploadFileCount"),
description: L("Features:Description:MaxUploadFileCount"),
valueType: new FreeTextStringValueType(new NumericValueValidator(1, 10)));
}
protected ILocalizableString L(string name)
{
return LocalizableString.Create<AbpFileManagementResource>(name);
}
}
}

23
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Features/AbpFileManagementFeatureNames.cs

@ -1,23 +0,0 @@
namespace LINGYUN.Abp.FileManagement.Features
{
public class AbpFileManagementFeatureNames
{
public const string GroupName = "Abp.FileManagement";
public class FileSystem
{
public const string Default = GroupName + ".FileSystem";
/// <summary>
/// 下载文件功能
/// </summary>
public const string DownloadFile = Default + ".DownloadFile";
/// <summary>
/// 上传文件功能
/// </summary>
public const string UploadFile = Default + ".UploadFile";
/// <summary>
/// 最大上传文件
/// </summary>
public const string MaxUploadFileCount = Default + ".MaxUploadFileCount";
}
}
}

21
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileCopyOrMoveDto.cs

@ -1,21 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.FileManagement
{
public class FileCopyOrMoveDto
{
[StringLength(255)]
public string Path { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
[Required]
[StringLength(255)]
public string ToPath { get; set; }
[StringLength(255)]
public string ToName { get; set; }
}
}

32
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileCreateDto.cs

@ -1,32 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.IO;
using Volo.Abp.Auditing;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.FileManagement
{
public class FileCreateDto
{
/// <summary>
/// 文件名
/// </summary>
[Required]
[StringLength(255)]
public string FileName { get; set; }
/// <summary>
/// 文件路径
/// </summary>
[StringLength(255)]
public string Path { get; set; }
/// <summary>
/// 文件数据,前端无需传递此参数,由控制器传递
/// </summary>
[DisableAuditing]
[DisableValidation]// TODO: 需要禁用参数检查,否则会有一个框架方面的性能问题存在
public byte[] Data { get; set; }
/// <summary>
/// 是否覆盖文件
/// </summary>
public bool Rewrite { get; set; } = false;
}
}

14
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileDeleteDto.cs

@ -1,14 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.FileManagement
{
public class FileDeleteDto
{
[StringLength(255)]
public string Path { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
}
}

15
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemDownloadDto.cs

@ -1,15 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace LINGYUN.Abp.FileManagement
{
public class FileSystemDownloadDto : FileSystemGetDto
{
/// <summary>
/// 当前字节数
/// </summary>
public int CurrentByte { get; set; }
}
}

15
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemDto.cs

@ -1,15 +0,0 @@
using System;
namespace LINGYUN.Abp.FileManagement
{
public class FileSystemDto
{
public FileSystemType Type { get; set; }
public string Name { get; set; }
public string Parent { get; set; }
public string Extension { get; set; }
public long? Size { get; set; }
public DateTime CreationTime { get; set; }
public DateTime? LastModificationTime { get; set; }
}
}

8
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemType.cs

@ -1,8 +0,0 @@
namespace LINGYUN.Abp.FileManagement
{
public enum FileSystemType
{
Folder = 0,
File = 1
}
}

11
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemUpdateDto.cs

@ -1,11 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.FileManagement
{
public class FileSystemUpdateDto
{
[Required]
[StringLength(255)]
public string NewName { get; set; }
}
}

11
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FolderCopyDto.cs

@ -1,11 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.FileManagement
{
public class FolderCopyDto
{
[Required]
[StringLength(255)]
public string CopyToPath { get; set; }
}
}

13
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FolderCreateDto.cs

@ -1,13 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.FileManagement
{
public class FolderCreateDto
{
[Required]
[StringLength(255)]
public string Path { get; set; }
public string Parent { get; set; }
}
}

11
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FolderMoveDto.cs

@ -1,11 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.FileManagement
{
public class FolderMoveDto
{
[Required]
[StringLength(255)]
public string MoveToPath { get; set; }
}
}

14
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/GetFileSystemListDto.cs

@ -1,14 +0,0 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.FileManagement
{
public class GetFileSystemListDto : PagedAndSortedResultRequestDto
{
// TODO: Windows最大路径长度,超过了貌似也无效了吧
[StringLength(255)]
public string Parent { get; set; }
public string Filter { get; set; }
}
}

35
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/IFileSystemAppService.cs

@ -1,35 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.FileManagement
{
public interface IFileSystemAppService : IApplicationService
{
Task<FileSystemDto> GetAsync(FileSystemGetDto input);
Task<PagedResultDto<FileSystemDto>> GetListAsync(GetFileSystemListDto input);
Task CreateFolderAsync(FolderCreateDto input);
Task<FileSystemDto> UpdateAsync([Required, StringLength(255)] string name, FileSystemUpdateDto input);
Task DeleteFolderAsync([Required, StringLength(255)] string path);
Task MoveFolderAsync([Required, StringLength(255)] string path, FolderMoveDto input);
Task CopyFolderAsync([Required, StringLength(255)] string path, FolderCopyDto input);
Task CreateFileAsync(FileCreateDto input);
Task DeleteFileAsync(FileDeleteDto input);
Task MoveFileAsync(FileCopyOrMoveDto input);
Task CopyFileAsync(FileCopyOrMoveDto input);
Task<Stream> DownloadFileAsync(FileSystemGetDto input);
}
}

34
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Permissions/AbpFileManagementPermissionDefinitionProvider.cs

@ -1,34 +0,0 @@
using LINGYUN.Abp.FileManagement.Localization;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
namespace LINGYUN.Abp.FileManagement.Permissions
{
public class AbpFileManagementPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var fileManagement = context.AddGroup(AbpFileManagementPermissions.GroupName, L("Permission:FileManagement"));
var fileSystem = fileManagement.AddPermission(AbpFileManagementPermissions.FileSystem.Default, L("Permission:FileSystem"));
fileSystem.AddChild(AbpFileManagementPermissions.FileSystem.Create, L("Permission:CreateFolder"));
fileSystem.AddChild(AbpFileManagementPermissions.FileSystem.Delete, L("Permission:DeleteFolder"));
fileSystem.AddChild(AbpFileManagementPermissions.FileSystem.Update, L("Permission:UpdateFolder"));
fileSystem.AddChild(AbpFileManagementPermissions.FileSystem.Copy, L("Permission:CopyFolder"));
fileSystem.AddChild(AbpFileManagementPermissions.FileSystem.Move, L("Permission:MoveFolder"));
var fileManager = fileSystem.AddChild(AbpFileManagementPermissions.FileSystem.FileManager.Default, L("Permission:FileManager"));
fileManager.AddChild(AbpFileManagementPermissions.FileSystem.FileManager.Create, L("Permission:AppendFile"));
fileManager.AddChild(AbpFileManagementPermissions.FileSystem.FileManager.Update, L("Permission:UpdateFile"));
fileManager.AddChild(AbpFileManagementPermissions.FileSystem.FileManager.Delete, L("Permission:DeleteFile"));
fileManager.AddChild(AbpFileManagementPermissions.FileSystem.FileManager.Copy, L("Permission:CopyFile"));
fileManager.AddChild(AbpFileManagementPermissions.FileSystem.FileManager.Move, L("Permission:MoveFile"));
fileManager.AddChild(AbpFileManagementPermissions.FileSystem.FileManager.Download, L("Permission:DownloadFile"));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<AbpFileManagementResource>(name);
}
}
}

44
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/Permissions/AbpFileManagementPermissions.cs

@ -1,44 +0,0 @@
namespace LINGYUN.Abp.FileManagement.Permissions
{
public class AbpFileManagementPermissions
{
public const string GroupName = "AbpFileManagement";
/// <summary>
/// 文件系统
/// </summary>
public class FileSystem
{
public const string Default = GroupName + ".FileSystem";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
public const string Update = Default + ".Update";
public const string Copy = Default + ".Copy";
public const string Move = Default + ".Move";
/// <summary>
/// 文件管理
/// </summary>
public class FileManager
{
public const string Default = FileSystem.Default + ".FileManager";
public const string Create = Default + ".Create";
public const string Copy = Default + ".Copy";
public const string Delete = Default + ".Delete";
public const string Update = Default + ".Update";
public const string Move = Default + ".Move";
public const string Download = Default + ".Download";
}
}
}
}

15
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN.Abp.FileManagement.Application.csproj

@ -1,15 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.FileManagement.Application.Contracts\LINGYUN.Abp.FileManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.FileManagement.Domain\LINGYUN.Abp.FileManagement.Domain.csproj" />
</ItemGroup>
</Project>

12
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN/Abp/FileManagement/AbpFileManagementApplicationModule.cs

@ -1,12 +0,0 @@
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.FileManagement
{
[DependsOn(
typeof(AbpFileManagementDomainModule),
typeof(AbpFileManagementApplicationContractsModule))]
public class AbpFileManagementApplicationModule : AbpModule
{
}
}

13
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN/Abp/FileManagement/FileManagementApplicationServiceBase.cs

@ -1,13 +0,0 @@
using LINGYUN.Abp.FileManagement.Localization;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.FileManagement
{
public class FileManagementApplicationServiceBase : ApplicationService
{
protected FileManagementApplicationServiceBase()
{
LocalizationResource = typeof(AbpFileManagementResource);
}
}
}

467
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application/LINGYUN/Abp/FileManagement/FileSystemAppService.cs

@ -1,467 +0,0 @@
using LINGYUN.Abp.FileManagement.Permissions;
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.BlobStoring;
using Volo.Abp.BlobStoring.FileSystem;
namespace LINGYUN.Abp.FileManagement
{
[Authorize(AbpFileManagementPermissions.FileSystem.Default)]
public class FileSystemAppService : FileManagementApplicationServiceBase, IFileSystemAppService
{
protected IBlobContainer<FileSystemContainer> BlobContainer { get; }
protected IBlobContainerConfigurationProvider BlobContainerConfigurationProvider { get; }
public FileSystemAppService(
IBlobContainer<FileSystemContainer> blobContainer,
IBlobContainerConfigurationProvider blobContainerConfigurationProvider)
{
BlobContainer = blobContainer;
BlobContainerConfigurationProvider = blobContainerConfigurationProvider;
}
[Authorize(AbpFileManagementPermissions.FileSystem.FileManager.Copy)]
public virtual Task CopyFileAsync(FileCopyOrMoveDto input)
{
string fileSystemPath = GetFileSystemPath(input.Path);
var fileFullName = Path.Combine(fileSystemPath, input.Name);
if (!File.Exists(fileFullName))
{
throw new UserFriendlyException(L["FilePathNotFound"]);
}
var copyToFilePath = GetFileSystemPath(input.ToPath);
var copyToFileFullName = Path.Combine(copyToFilePath, input.ToName ?? input.Name);
if (File.Exists(copyToFileFullName))
{
throw new UserFriendlyException(L["FilePathAlreadyExists"]);
}
File.Copy(fileFullName, copyToFileFullName);
return Task.CompletedTask;
}
[Authorize(AbpFileManagementPermissions.FileSystem.Copy)]
public virtual Task CopyFolderAsync([Required, StringLength(255)] string path, FolderCopyDto input)
{
string fileSystemPath = GetFileSystemPath(path);
if (!Directory.Exists(fileSystemPath))
{
throw new UserFriendlyException(L["PathNotFound"]);
}
var copyToFilePath = GetFileSystemPath(input.CopyToPath);
if (Directory.Exists(copyToFilePath))
{
throw new UserFriendlyException(L["FilePathAlreadyExists"]);
}
CopyDirectory(fileSystemPath, copyToFilePath);
return Task.CompletedTask;
}
[Authorize(AbpFileManagementPermissions.FileSystem.FileManager.Create)]
public virtual async Task CreateFileAsync(FileCreateDto input)
{
string fileSystemPath = GetFileSystemPath(input.Path);
fileSystemPath = Path.Combine(fileSystemPath, input.FileName);
var blobName = GetFileSystemRelativePath(fileSystemPath);
// 去除第一个路径标识符
blobName = blobName.RemovePreFix("/", "\\");
if (!input.Rewrite && await BlobContainer.ExistsAsync(blobName))
{
throw new UserFriendlyException(L["FilePathAlreadyExists"]);
}
await BlobContainer.SaveAsync(blobName, input.Data, input.Rewrite);
Array.Clear(input.Data, 0, input.Data.Length);
}
[Authorize(AbpFileManagementPermissions.FileSystem.Create)]
public virtual Task CreateFolderAsync(FolderCreateDto input)
{
string fileSystemPath = GetFileSystemBashPath();
if (!input.Parent.IsNullOrWhiteSpace())
{
fileSystemPath = GetFileSystemPath(input.Parent);
}
var newFloderPath = Path.Combine(fileSystemPath, input.Path);
if (Directory.Exists(newFloderPath))
{
throw new UserFriendlyException(L["PathAlreadyExists"]);
}
Directory.CreateDirectory(newFloderPath);
return Task.CompletedTask;
}
[Authorize(AbpFileManagementPermissions.FileSystem.FileManager.Delete)]
public virtual Task DeleteFileAsync(FileDeleteDto input)
{
var fileSystemPath = GetFileSystemPath(input.Path);
fileSystemPath = Path.Combine(fileSystemPath, input.Name);
if (File.Exists(fileSystemPath))
{
File.Delete(fileSystemPath);
}
return Task.CompletedTask;
}
[Authorize(AbpFileManagementPermissions.FileSystem.Delete)]
public virtual Task DeleteFolderAsync([Required, StringLength(255)] string path)
{
string fileSystemPath = GetFileSystemPath(path);
if (!Directory.Exists(fileSystemPath))
{
throw new UserFriendlyException(L["FilePathNotFound"]);
}
var fileSystemChildrenPath = Directory.GetDirectories(fileSystemPath);
if (fileSystemChildrenPath.Length > 0)
{
throw new UserFriendlyException(L["PathCannotBeDeletedWithNotEmpty"]);
}
var fileSystemPathFiles = Directory.GetFiles(fileSystemPath);
if (fileSystemPathFiles.Length > 0)
{
throw new UserFriendlyException(L["PathCannotBeDeletedWithNotEmpty"]);
}
Directory.Delete(fileSystemPath);
return Task.CompletedTask;
}
[Authorize(AbpFileManagementPermissions.FileSystem.FileManager.Download)]
public virtual async Task<Stream> DownloadFileAsync(FileSystemGetDto input)
{
var fileSystemPath = GetFileSystemPath(input.Path);
fileSystemPath = Path.Combine(fileSystemPath, input.Name);
var blobName = GetFileSystemRelativePath(fileSystemPath);
// 去除第一个路径标识符
blobName = blobName.RemovePreFix("/", "\\");
return await BlobContainer.GetAsync(blobName);
}
public virtual Task<FileSystemDto> GetAsync(FileSystemGetDto input)
{
var fileSystemPath = GetFileSystemPath(input.Path);
fileSystemPath = Path.Combine(fileSystemPath, input.Name);
if (File.Exists(fileSystemPath))
{
var fileInfo = new FileInfo(fileSystemPath);
var fileSystem = new FileSystemDto
{
Type = FileSystemType.File,
Name = fileInfo.Name,
Size = fileInfo.Length,
Extension = fileInfo.Extension,
CreationTime = fileInfo.CreationTime,
LastModificationTime = fileInfo.LastWriteTime
};
if (fileInfo.Directory != null && !fileInfo.Directory.FullName.IsNullOrWhiteSpace())
{
fileSystem.Parent = GetFileSystemRelativePath(fileInfo.Directory.FullName);
}
return Task.FromResult(fileSystem);
}
if (Directory.Exists(fileSystemPath))
{
var directoryInfo = new DirectoryInfo(fileSystemPath);
var fileSystem = new FileSystemDto
{
Type = FileSystemType.Folder,
Name = directoryInfo.Name,
CreationTime = directoryInfo.CreationTime,
LastModificationTime = directoryInfo.LastWriteTime
};
if (directoryInfo.Parent != null && !directoryInfo.Parent.FullName.IsNullOrWhiteSpace())
{
fileSystem.Parent = GetFileSystemRelativePath(directoryInfo.Parent.FullName);
}
return Task.FromResult(fileSystem);
}
throw new UserFriendlyException(L["FilePathNotFound"]);
}
public virtual Task<PagedResultDto<FileSystemDto>> GetListAsync(GetFileSystemListDto input)
{
List<FileSystemDto> fileSystems = new List<FileSystemDto>();
string fileSystemPath = GetFileSystemBashPath();
if (!input.Parent.IsNullOrWhiteSpace())
{
fileSystemPath = GetFileSystemPath(input.Parent);
}
var directoryInfo = new DirectoryInfo(fileSystemPath);
if (!directoryInfo.Exists)
{
return Task.FromResult(new PagedResultDto<FileSystemDto>(0, fileSystems));
}
// 查询全部文件系统
var fileSystemInfos = directoryInfo.GetFileSystemInfos();
// 指定搜索条件查询目录
FileSystemInfo[] fileSystemInfoSearchChildren;
if (!input.Filter.IsNullOrWhiteSpace())
{
var searchPattern = $"*{input.Filter}*";
fileSystemInfoSearchChildren = directoryInfo.GetFileSystemInfos(searchPattern);
}
else
{
fileSystemInfoSearchChildren = directoryInfo.GetFileSystemInfos();
}
fileSystemInfoSearchChildren = fileSystemInfoSearchChildren
.Skip((input.SkipCount - 1) * input.MaxResultCount)
.Take(input.MaxResultCount)
.ToArray();
foreach (var fileSystemInfo in fileSystemInfoSearchChildren)
{
var fileSystem = new FileSystemDto
{
Name = fileSystemInfo.Name,
CreationTime = fileSystemInfo.CreationTime,
LastModificationTime = fileSystemInfo.LastWriteTime,
};
if (fileSystemInfo is FileInfo fileInfo)
{
fileSystem.Type = FileSystemType.File;
fileSystem.Size = fileInfo.Length;
fileSystem.Extension = fileInfo.Extension;
if (fileInfo.Directory != null && !fileInfo.Directory.FullName.IsNullOrWhiteSpace())
{
fileSystem.Parent = GetFileSystemRelativePath(fileInfo.Directory.FullName);
}
}
else if (fileSystemInfo is DirectoryInfo directory)
{
fileSystem.Type = FileSystemType.Folder;
if (directory.Parent != null && !directory.Parent.FullName.IsNullOrWhiteSpace())
{
fileSystem.Parent = GetFileSystemRelativePath(directory.Parent.FullName);
}
}
fileSystems.Add(fileSystem);
}
fileSystems = fileSystems
.OrderBy(f => f.Type)
.ThenBy(f => f.Name)
.ToList();
return Task.FromResult(new PagedResultDto<FileSystemDto>(
fileSystemInfos.Length, fileSystems
));
}
[Authorize(AbpFileManagementPermissions.FileSystem.FileManager.Move)]
public virtual Task MoveFileAsync(FileCopyOrMoveDto input)
{
string fileSystemPath = GetFileSystemPath(input.Path);
fileSystemPath = Path.Combine(fileSystemPath, input.Name);
if (!File.Exists(fileSystemPath))
{
throw new UserFriendlyException(L["FilePathNotFound"]);
}
var moveToFilePath = GetFileSystemPath(input.ToPath);
moveToFilePath = Path.Combine(moveToFilePath, input.ToName ?? input.Name);
if (File.Exists(moveToFilePath))
{
throw new UserFriendlyException(L["FilePathAlreadyExists"]);
}
File.Move(fileSystemPath, moveToFilePath);
return Task.CompletedTask;
}
[Authorize(AbpFileManagementPermissions.FileSystem.Move)]
public virtual Task MoveFolderAsync([Required, StringLength(255)] string path, FolderMoveDto input)
{
string fileSystemPath = GetFileSystemPath(path);
if (!Directory.Exists(fileSystemPath))
{
throw new UserFriendlyException(L["FilePathNotFound"]);
}
var moveToFilePath = GetFileSystemPath(input.MoveToPath);
if (Directory.Exists(moveToFilePath))
{
throw new UserFriendlyException(L["FilePathAlreadyExists"]);
}
Directory.Move(fileSystemPath, moveToFilePath);
return Task.CompletedTask;
}
[Authorize(AbpFileManagementPermissions.FileSystem.Update)]
public virtual Task<FileSystemDto> UpdateAsync([Required, StringLength(255)] string name, FileSystemUpdateDto input)
{
string fileSystemPath = GetFileSystemPath(name);
var renameFilePath = GetFileSystemPath(input.NewName);
if (File.Exists(fileSystemPath))
{
if (File.Exists(renameFilePath))
{
throw new UserFriendlyException(L["FilePathAlreadyExists"]);
}
File.Move(fileSystemPath, renameFilePath);
var fileInfo = new FileInfo(renameFilePath);
var fileSystem = new FileSystemDto
{
Type = FileSystemType.File,
Name = fileInfo.Name,
Size = fileInfo.Length,
Extension = fileInfo.Extension,
CreationTime = fileInfo.CreationTime,
LastModificationTime = fileInfo.LastWriteTime
};
if (fileInfo.Directory != null && !fileInfo.Directory.FullName.IsNullOrWhiteSpace())
{
fileSystem.Parent = GetFileSystemRelativePath(fileInfo.Directory.FullName);
}
return Task.FromResult(fileSystem);
}
if (Directory.Exists(fileSystemPath))
{
if (Directory.Exists(renameFilePath))
{
throw new UserFriendlyException(L["FilePathAlreadyExists"]);
}
Directory.Move(fileSystemPath, renameFilePath);
var directoryInfo = new DirectoryInfo(renameFilePath);
var fileSystem = new FileSystemDto
{
Type = FileSystemType.Folder,
Name = directoryInfo.Name,
CreationTime = directoryInfo.CreationTime,
LastModificationTime = directoryInfo.LastWriteTime
};
if (directoryInfo.Parent != null && !directoryInfo.Parent.FullName.IsNullOrWhiteSpace())
{
fileSystem.Parent = GetFileSystemRelativePath(directoryInfo.Parent.FullName);
}
return Task.FromResult(fileSystem);
}
throw new UserFriendlyException(L["FilePathNotFound"]);
}
/// <summary>
/// 获取文件系统相对路径
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
protected virtual string GetFileSystemRelativePath(string path)
{
// 去除完整路径中的文件系统根目录
var fileSystemConfiguration = GetFileSystemBlobProviderConfiguration();
var blobPath = fileSystemConfiguration.BasePath;
// 去除租户或宿主目录
if (CurrentTenant.Id == null)
{
blobPath = Path.Combine(blobPath, "host");
}
else
{
blobPath = Path.Combine(blobPath, "tenants", CurrentTenant.Id.Value.ToString("D"));
}
// 去除完整路径中的容器根目录
var containerName = BlobContainerNameAttribute.GetContainerName<FileSystemContainer>();
if (path.Contains(containerName))
{
blobPath = Path.Combine(blobPath, containerName);
}
path = path.Replace(blobPath, "");
path = path.Replace('/', Path.DirectorySeparatorChar);
path = path.Replace('\\', Path.DirectorySeparatorChar);
return path;
}
/// <summary>
/// 获取合并的文件路径
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
protected virtual string GetFileSystemPath(string path)
{
var fileSystemConfiguration = GetFileSystemBlobProviderConfiguration();
var blobPath = GetFileSystemBashPath();
if (!path.IsNullOrWhiteSpace() && fileSystemConfiguration.AppendContainerNameToBasePath)
{
path = path.Replace('/', Path.DirectorySeparatorChar);
path = path.Replace('\\', Path.DirectorySeparatorChar);
// 去除第一个路径标识符
path = path.RemovePreFix("/", "\\");
blobPath = Path.Combine(blobPath, path);
}
return blobPath;
}
/// <summary>
/// 获取文件系统存储路径
/// </summary>
/// <returns></returns>
protected virtual string GetFileSystemBashPath()
{
var fileSystemConfiguration = GetFileSystemBlobProviderConfiguration();
var blobPath = fileSystemConfiguration.BasePath;
blobPath = Path.Combine(Directory.GetCurrentDirectory(), blobPath);
if (CurrentTenant.Id == null)
{
blobPath = Path.Combine(blobPath, "host");
}
else
{
blobPath = Path.Combine(blobPath, "tenants", CurrentTenant.Id.Value.ToString("D"));
}
var containerName = BlobContainerNameAttribute.GetContainerName<FileSystemContainer>();
blobPath = Path.Combine(blobPath, containerName);
if (!Directory.Exists(blobPath))
{
Directory.CreateDirectory(blobPath);
}
return blobPath;
}
protected virtual FileSystemBlobProviderConfiguration GetFileSystemBlobProviderConfiguration()
{
var blobConfiguration = BlobContainerConfigurationProvider
.Get<FileSystemContainer>();
return blobConfiguration.GetFileSystemConfiguration();
}
protected void CopyDirectory(string sourcePath, string copyToPath)
{
var sourceDirectory = new DirectoryInfo(sourcePath);
var fileSystemInfos = sourceDirectory.GetFileSystemInfos();
foreach (var fileSystemInfo in fileSystemInfos)
{
var copyToFilePath = Path.Combine(copyToPath, fileSystemInfo.Name);
if (fileSystemInfo is DirectoryInfo)
{
if (!Directory.Exists(copyToFilePath))
{
Directory.CreateDirectory(copyToFilePath);
}
CopyDirectory(fileSystemInfo.FullName, copyToFilePath);
}
else
{
File.Copy(fileSystemInfo.FullName, copyToFilePath, true);
}
}
}
}
}

30
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/AbpFileManagementDomainSharedModule.cs

@ -1,30 +0,0 @@
using LINGYUN.Abp.FileManagement.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Validation;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
namespace LINGYUN.Abp.FileManagement
{
[DependsOn(typeof(AbpValidationModule))]
public class AbpFileManagementDomainSharedModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpFileManagementDomainSharedModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<AbpFileManagementResource>("en")
.AddBaseTypes(
typeof(AbpValidationResource)
).AddVirtualJson("/LINGYUN/Abp/FileManagement/Localization/Resources");
});
}
}
}

9
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Localization/AbpFileManagementResource.cs

@ -1,9 +0,0 @@
using Volo.Abp.Localization;
namespace LINGYUN.Abp.FileManagement.Localization
{
[LocalizationResourceName("AbpFileManagement")]
public class AbpFileManagementResource
{
}
}

39
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Localization/Resources/en.json

@ -1,39 +0,0 @@
{
"culture": "en",
"texts": {
"Permission:FileManagement": "File management",
"Permission:FileSystem": "File system",
"Permission:FileManager": "Files",
"Permission:CreateFolder": "Create directory",
"Permission:DeleteFolder": "Delete directory",
"Permission:UpdateFolder": "Edit directory",
"Permission:MoveFolder": "Change directory",
"Permission:CopyFolder": "Copy directory",
"Permission:AppendFile": "Add files",
"Permission:UpdateFile": "Change file",
"Permission:DeleteFile": "Delete file",
"Permission:CopyFile": "Copy file",
"Permission:MoveFile": "Move file",
"Permission:DownloadFile": "Download file",
"FileNotFound": "The specified file does not exist!",
"PathNotFound": "The specified directory does not exist!",
"FilePathNotFound": "The file or directory does not exist!",
"PathAlreadyExists": "The specified directory already exists!",
"PathCannotBeDeletedWithNotEmpty": "The specified directory is not empty and cannot be deleted!",
"FilePathAlreadyExists": "The same file or directory already exists in the specified path!",
"UploadFileSizeBeyondLimit": "Upload file size cannot exceed {0} MB!",
"NotAllowedFileExtensionName": "Not allowed file extension: {0}!",
"DisplayName:FileLimitLength": "File limit size",
"Description:FileLimitLength": "Limit size of uploaded file in MB",
"DisplayName:AllowFileExtensions": "File extension",
"Description:AllowFileExtensions": "List of allowed extensions to upload files, with multiple extensions separated by, don't need a notation",
"Features:FileManagement": "File management",
"Features:DisplayName:FileSystem": "File system",
"Features:DisplayName:DownloadFile": "Download file",
"Features:Description:DownloadFile": "Whether to allow users to download files",
"Features:DisplayName:UploadFile": "Upload file",
"Features:Description:UploadFile": "Whether to allow users to upload files",
"Features:DisplayName:MaxUploadFileCount": "Maximum number of upload files",
"Features:Description:MaxUploadFileCount": "Limit the number of files a user uploads at a time"
}
}

39
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Localization/Resources/zh-Hans.json

@ -1,39 +0,0 @@
{
"culture": "zh-Hans",
"texts": {
"Permission:FileManagement": "文件管理",
"Permission:FileSystem": "文件系统",
"Permission:FileManager": "文件",
"Permission:CreateFolder": "创建目录",
"Permission:DeleteFolder": "删除目录",
"Permission:UpdateFolder": "修改目录",
"Permission:MoveFolder": "变更目录",
"Permission:CopyFolder": "复制目录",
"Permission:AppendFile": "添加文件",
"Permission:UpdateFile": "变更文件",
"Permission:DeleteFile": "删除文件",
"Permission:CopyFile": "复制文件",
"Permission:MoveFile": "移动文件",
"Permission:DownloadFile": "下载文件",
"FileNotFound": "指定的文件不存在!",
"PathNotFound": "指定的目录不存在!",
"FilePathNotFound": "文件或目录不存在!",
"PathAlreadyExists": "指定的目录已经存在!",
"PathCannotBeDeletedWithNotEmpty": "指定的目录不为空,不可删除此目录!",
"FilePathAlreadyExists": "指定的路径中已经有相同的文件或目录存在!",
"UploadFileSizeBeyondLimit": "上传文件大小不能超过 {0} MB!",
"NotAllowedFileExtensionName": "不被允许的文件扩展名: {0}!",
"DisplayName:FileLimitLength": "文件限制大小",
"Description:FileLimitLength": "上传文件的限制大小,单位(MB)",
"DisplayName:AllowFileExtensions": "文件扩展名",
"Description:AllowFileExtensions": "允许的上传文件扩展名列表,多个扩展名以,分隔,无需输入.符号",
"Features:FileManagement": "文件管理",
"Features:DisplayName:FileSystem": "文件系统",
"Features:DisplayName:DownloadFile": "下载文件",
"Features:Description:DownloadFile": "是否允许用户下载文件",
"Features:DisplayName:UploadFile": "上传文件",
"Features:Description:UploadFile": "是否允许用户上传文件",
"Features:DisplayName:MaxUploadFileCount": "上传文件数量",
"Features:Description:MaxUploadFileCount": "用户单次上传文件的限制数量"
}
}

18
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain/LINGYUN.Abp.FileManagement.Domain.csproj

@ -1,18 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.BlobStoring.FileSystem" Version="4.2.1" />
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.FileManagement.Domain.Shared\LINGYUN.Abp.FileManagement.Domain.Shared.csproj" />
</ItemGroup>
</Project>

15
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain/LINGYUN/Abp/FileManagement/AbpFileManagementDomainModule.cs

@ -1,15 +0,0 @@
using Volo.Abp.Domain;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.FileManagement
{
[DependsOn(
typeof(AbpDddDomainModule),
typeof(AbpMultiTenancyModule),
typeof(AbpFileManagementDomainSharedModule)
)]
public class AbpFileManagementDomainModule : AbpModule
{
}
}

9
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain/LINGYUN/Abp/FileManagement/FileSystemContainer.cs

@ -1,9 +0,0 @@
using Volo.Abp.BlobStoring;
namespace LINGYUN.Abp.FileManagement
{
[BlobContainerName("abp-file-management")]
public class FileSystemContainer
{
}
}

265
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.HttpApi/LINGYUN/Abp/FileManagement/FileSystemController.cs

@ -1,265 +0,0 @@
using LINGYUN.Abp.FileManagement.Localization;
using LINGYUN.Abp.FileManagement.Permissions;
using LINGYUN.Abp.FileManagement.Settings;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
using System;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.IO;
using Volo.Abp.Settings;
using Volo.Abp.Features;
using LINGYUN.Abp.FileManagement.Features;
namespace LINGYUN.Abp.FileManagement
{
[Controller]
[RemoteService(Name = "AbpFileManagement")]
[Area("file-management")]
[Route("api/file-management/file-system")]
public class FileSystemController : AbpController
{
protected ISettingProvider SettingProvider { get; }
protected IFileSystemAppService FileSystemAppService { get; }
public FileSystemController(
ISettingProvider settingProvider,
IFileSystemAppService fileSystemAppService)
{
SettingProvider = settingProvider;
FileSystemAppService = fileSystemAppService;
LocalizationResource = typeof(AbpFileManagementResource);
}
[HttpPut]
[Route("files/copy")]
public virtual async Task CopyFileAsync(FileCopyOrMoveDto input)
{
await FileSystemAppService.CopyFileAsync(input);
}
[HttpPut]
[Route("folders/copy")]
public virtual async Task CopyFolderAsync([Required, StringLength(255)] string path, FolderCopyDto input)
{
await FileSystemAppService.CopyFolderAsync(path, input);
}
[HttpPost]
[Route("files")]
[RequiresFeature(AbpFileManagementFeatureNames.FileSystem.UploadFile)]
[Authorize(AbpFileManagementPermissions.FileSystem.FileManager.Create)]
public virtual async Task CreateFileAsync([FromForm] FileUploadDto input)
{
// 检查文件大小
var fileSizeLimited = await SettingProvider
.GetAsync(
AbpFileManagementSettingNames.FileLimitLength,
AbpFileManagementSettingNames.DefaultFileLimitLength);
if (fileSizeLimited * 1024 * 1024 < input.TotalSize)
{
throw new UserFriendlyException(L["UploadFileSizeBeyondLimit", fileSizeLimited]);
}
// 采用分块模式上传文件
// 保存分块到临时目录
var fileName = input.FileName;
// 文件扩展名
var fileExtensionName = FileHelper.GetExtension(fileName);
var fileAllowExtension = await SettingProvider
.GetOrDefaultAsync(AbpFileManagementSettingNames.AllowFileExtensions, ServiceProvider);
// 检查文件扩展名
if (!fileAllowExtension.Split(',')
.Any(fe => fe.Equals(fileExtensionName, StringComparison.CurrentCultureIgnoreCase)))
{
throw new UserFriendlyException(L["NotAllowedFileExtensionName", fileExtensionName]);
}
// 以上传的文件名创建一个临时目录
var tempFilePath = Path.Combine(
Path.GetTempPath(),
"lingyun-abp-file-management",
"upload",
string.Concat(input.Path ?? "", input.FileName).ToMd5());
DirectoryHelper.CreateIfNotExists(tempFilePath);
// 以上传的分片索引创建临时文件
var tempSavedFile = Path.Combine(tempFilePath, $"{input.ChunkNumber}.{fileExtensionName}");
try
{
if (HttpContext.RequestAborted.IsCancellationRequested)
{
// 如果取消请求,删除临时目录
Directory.Delete(tempFilePath, true);
return;
}
if (input.File != null)
{
// 保存临时文件
using (var fs = new FileStream(tempSavedFile, FileMode.Create, FileAccess.Write))
{
// 写入当前分片文件
await input.File.CopyToAsync(fs);
}
}
if (input.ChunkNumber == input.TotalChunks)
{
// 合并文件
var mergeSavedFile = Path.Combine(tempFilePath, $"{fileName}");
// 获取并排序所有分片文件
var mergeFiles = Directory.GetFiles(tempFilePath).OrderBy(f => f.Length).ThenBy(f => f);
// 创建临时合并文件
input.Data = new byte[0];
foreach (var mergeFile in mergeFiles)
{
// 读取当前文件字节
var mergeFileBytes = await FileHelper.ReadAllBytesAsync(mergeFile);
// 写入到合并文件流
input.Data = input.Data.Concat(mergeFileBytes).ToArray();
Array.Clear(mergeFileBytes,0, mergeFileBytes.Length);
// 删除已参与合并的临时文件分片
FileHelper.DeleteIfExists(mergeFile);
}
await FileSystemAppService.CreateFileAsync(input);
// 文件保存之后删除临时文件目录
Directory.Delete(tempFilePath, true);
}
}
catch
{
// 发生异常删除临时文件目录
Directory.Delete(tempFilePath, true);
throw;
}
}
[HttpPost]
[Route("folders")]
public virtual async Task CreateFolderAsync(FolderCreateDto input)
{
await FileSystemAppService.CreateFolderAsync(input);
}
[HttpDelete]
[Route("files")]
public virtual async Task DeleteFileAsync(FileDeleteDto input)
{
await FileSystemAppService.DeleteFileAsync(input);
}
[HttpDelete]
[Route("folders")]
public virtual async Task DeleteFolderAsync([Required, StringLength(255)] string path)
{
await FileSystemAppService.DeleteFolderAsync(path);
}
[HttpGet]
[Route("files")]
[RequiresFeature(AbpFileManagementFeatureNames.FileSystem.DownloadFile)]
[Authorize(AbpFileManagementPermissions.FileSystem.FileManager.Download)]
public virtual async Task<IActionResult> DownloadFileAsync(FileSystemDownloadDto input)
{
var tempFileName = string.Concat(input.Path ?? "", input.Name);
tempFileName = tempFileName.ToMd5() + Path.GetExtension(input.Name);
// 以上传的文件名创建一个临时目录
var tempFilePath = Path.Combine(
Path.GetTempPath(),
"lingyun-abp-file-management",
"download");
DirectoryHelper.CreateIfNotExists(tempFilePath);
tempFilePath = Path.Combine(tempFilePath, tempFileName);
long contentLength = 0L;
// 单个分块大小 2MB
int bufferSize = 2 * 1024 * 1024;
using (new DisposeAction(() =>
{
// 最终下载完毕后,删除临时文件
if (bufferSize + input.CurrentByte > contentLength)
{
FileHelper.DeleteIfExists(tempFilePath);
}
}))
{
if (!System.IO.File.Exists(tempFilePath))
{
var blobStream = await FileSystemAppService.DownloadFileAsync(input);
using (var tempFileStream = new FileStream(tempFilePath, FileMode.Create, FileAccess.Write))
{
blobStream.Position = 0;
await blobStream.CopyToAsync(tempFileStream);
}
}
// 读取缓存文件
using var fileStream = new FileStream(tempFilePath, FileMode.Open, FileAccess.Read);
// 得到文件扩展名
var fileExt = Path.GetExtension(input.Name);
var provider = new FileExtensionContentTypeProvider();
// Http响应标头的文件类型
string memi = provider.Mappings[fileExt];
// 文件大小
contentLength = fileStream.Length;
if (bufferSize > contentLength)
{
var currentTransferBytes = await fileStream.GetAllBytesAsync();
// 写入响应流
return File(currentTransferBytes, memi, input.Name);
}
else
{
// 当前分页传输字节
byte[] currentTransferBytes = new byte[bufferSize];
if (input.CurrentByte + bufferSize >= contentLength)
{
currentTransferBytes = new byte[contentLength - input.CurrentByte];
}
// 读取文件流中的当前分块区段
fileStream.Seek(input.CurrentByte, SeekOrigin.Begin);
await fileStream.ReadAsync(currentTransferBytes, 0, currentTransferBytes.Length);
// 写入响应流
return File(currentTransferBytes, memi, input.Name);
}
}
}
[HttpGet]
[Route("profile")]
public virtual async Task<FileSystemDto> GetAsync(FileSystemGetDto input)
{
return await FileSystemAppService.GetAsync(input);
}
[HttpGet]
public virtual async Task<PagedResultDto<FileSystemDto>> GetListAsync(GetFileSystemListDto input)
{
return await FileSystemAppService.GetListAsync(input);
}
[HttpPut]
[Route("files/move")]
public virtual async Task MoveFileAsync(FileCopyOrMoveDto input)
{
await FileSystemAppService.MoveFileAsync(input);
}
[HttpPut]
[Route("folders/move")]
public virtual async Task MoveFolderAsync([Required, StringLength(255)] string path, FolderMoveDto input)
{
await FileSystemAppService.MoveFolderAsync(path, input);
}
[HttpPut]
public virtual async Task<FileSystemDto> UpdateAsync([Required, StringLength(255)] string name, FileSystemUpdateDto input)
{
return await FileSystemAppService.UpdateAsync(name, input);
}
}
}

22
aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application/LINGYUN/Abp/Identity/AbpIdentityApplicationModule.cs

@ -1,6 +1,9 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AutoMapper; using Volo.Abp.AutoMapper;
using Volo.Abp.Identity;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Threading;
namespace LINGYUN.Abp.Identity namespace LINGYUN.Abp.Identity
{ {
@ -10,6 +13,7 @@ namespace LINGYUN.Abp.Identity
typeof(AbpIdentityDomainModule))] typeof(AbpIdentityDomainModule))]
public class AbpIdentityApplicationModule : AbpModule public class AbpIdentityApplicationModule : AbpModule
{ {
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
context.Services.AddAutoMapperObjectMapper<AbpIdentityApplicationModule>(); context.Services.AddAutoMapperObjectMapper<AbpIdentityApplicationModule>();
@ -19,5 +23,23 @@ namespace LINGYUN.Abp.Identity
options.AddProfile<AbpIdentityApplicationModuleAutoMapperProfile>(validate: true); options.AddProfile<AbpIdentityApplicationModuleAutoMapperProfile>(validate: true);
}); });
} }
public override void PostConfigureServices(ServiceConfigurationContext context)
{
OneTimeRunner.Run(() =>
{
ObjectExtensionManager.Instance
.AddOrUpdateProperty<string>(
new[]
{
typeof(IdentityUserDto),
typeof(IdentityUserCreateDto),
typeof(IdentityUserUpdateDto),
typeof(ProfileDto),
typeof(UpdateProfileDto)
},
ExtensionIdentityUserConsts.AvatarUrlField);
});
}
} }
} }

14
aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain.Shared/LINGYUN/Abp/Identity/ExtensionIdentityUserConsts.cs

@ -0,0 +1,14 @@
namespace LINGYUN.Abp.Identity
{
public static class ExtensionIdentityUserConsts
{
/// <summary>
/// 头像字段
/// </summary>
public static string AvatarUrlField { get; set; } = "AvatarUrl";
/// <summary>
/// 头像字段最大长度
/// </summary>
public static int MaxAvatarUrlLength { get; set; } = 128;
}
}

18
aspnet-core/modules/identity/LINGYUN.Abp.Identity.EntityFrameworkCore/LINGYUN/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs

@ -2,6 +2,8 @@
using Volo.Abp.Identity; using Volo.Abp.Identity;
using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Threading;
namespace LINGYUN.Abp.Identity.EntityFrameworkCore namespace LINGYUN.Abp.Identity.EntityFrameworkCore
{ {
@ -9,6 +11,8 @@ namespace LINGYUN.Abp.Identity.EntityFrameworkCore
[DependsOn(typeof(Volo.Abp.Identity.EntityFrameworkCore.AbpIdentityEntityFrameworkCoreModule))] [DependsOn(typeof(Volo.Abp.Identity.EntityFrameworkCore.AbpIdentityEntityFrameworkCoreModule))]
public class AbpIdentityEntityFrameworkCoreModule : AbpModule public class AbpIdentityEntityFrameworkCoreModule : AbpModule
{ {
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
context.Services.AddAbpDbContext<IdentityDbContext>(options => context.Services.AddAbpDbContext<IdentityDbContext>(options =>
@ -17,5 +21,19 @@ namespace LINGYUN.Abp.Identity.EntityFrameworkCore
options.AddRepository<IdentityUser, EfCoreIdentityUserRepository>(); options.AddRepository<IdentityUser, EfCoreIdentityUserRepository>();
}); });
} }
public override void PostConfigureServices(ServiceConfigurationContext context)
{
OneTimeRunner.Run(() =>
{
ObjectExtensionManager.Instance
.MapEfCoreProperty<IdentityUser, string>(
ExtensionIdentityUserConsts.AvatarUrlField,
(etb, prop) =>
{
prop.HasMaxLength(ExtensionIdentityUserConsts.MaxAvatarUrlLength);
});
});
}
} }
} }

13
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN.Abp.OssManagement.Aliyun.csproj

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj" />
</ItemGroup>
</Project>

17
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AbpOssManagementAliyunModule.cs

@ -0,0 +1,17 @@
using LINGYUN.Abp.BlobStoring.Aliyun;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.OssManagement.Aliyun
{
[DependsOn(
typeof(AbpBlobStoringAliyunModule),
typeof(AbpOssManagementDomainModule))]
public class AbpOssManagementAliyunModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddTransient<IOssContainerFactory, AliyunOssContainerFactory>();
}
}
}

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

@ -0,0 +1,369 @@
using Aliyun.OSS;
using LINGYUN.Abp.BlobStoring.Aliyun;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.OssManagement.Aliyun
{
/// <summary>
/// Oss容器的阿里云实现
/// </summary>
internal class AliyunOssContainer : IOssContainer
{
protected ICurrentTenant CurrentTenant { get; }
protected IOssClientFactory OssClientFactory { get; }
public AliyunOssContainer(
ICurrentTenant currentTenant,
IOssClientFactory ossClientFactory)
{
CurrentTenant = currentTenant;
OssClientFactory = ossClientFactory;
}
public virtual async Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request)
{
var ossClient = await CreateClientAsync();
var path = GetBasePath(request.Path);
var aliyunRequest = new DeleteObjectsRequest(request.Bucket, request.Objects.Select(x => x += path).ToList());
ossClient.DeleteObjects(aliyunRequest);
}
public virtual async Task<OssContainer> CreateAsync(string name)
{
var ossClient = await CreateClientAsync();
if (BucketExists(ossClient, name))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerAlreadyExists);
}
var bucket = ossClient.CreateBucket(name);
return new OssContainer(
bucket.Name,
bucket.CreationDate,
0L,
bucket.CreationDate,
new Dictionary<string, string>
{
{ "Id", bucket.Owner?.Id },
{ "DisplayName", bucket.Owner?.DisplayName }
});
}
public virtual async Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{
var ossClient = await CreateClientAsync();
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.ObjectAlreadyExists);
}
// 当一个对象名称是以 / 结尾时,不论该对象是否存有数据,都以目录的形式存在
// 详情见:https://help.aliyun.com/document_detail/31910.html
if (objectName.EndsWith("/") &&
request.Content.IsNullOrEmpty())
{
var emptyStream = new MemoryStream();
var emptyData = System.Text.Encoding.UTF8.GetBytes("");
await emptyStream.WriteAsync(emptyData, 0, emptyData.Length);
request.SetContent(emptyStream);
}
// 没有bucket则创建
if (!BucketExists(ossClient, request.Bucket))
{
ossClient.CreateBucket(request.Bucket);
}
var aliyunObjectRequest = new PutObjectRequest(request.Bucket, objectName, request.Content)
{
Metadata = new ObjectMetadata()
};
if (request.ExpirationTime.HasValue)
{
aliyunObjectRequest.Metadata.ExpirationTime = DateTime.Now.Add(request.ExpirationTime.Value);
}
var aliyunObject = ossClient.PutObject(aliyunObjectRequest);
var ossObject = new OssObject(
!objectPath.IsNullOrWhiteSpace()
? objectName.Replace(objectPath, "")
: objectName,
objectPath,
DateTime.Now,
aliyunObject.ContentLength,
DateTime.Now,
aliyunObject.ResponseMetadata,
objectName.EndsWith("/") // 名称结尾是 / 符号的则为目录:https://help.aliyun.com/document_detail/31910.html
)
{
FullName = objectName
};
if (!Equals(request.Content, Stream.Null))
{
request.Content.Seek(0, SeekOrigin.Begin);
ossObject.SetContent(request.Content);
}
return ossObject;
}
public virtual async Task DeleteAsync(string name)
{
var ossClient = await CreateClientAsync();
if (BucketExists(ossClient, name))
{
ossClient.DeleteBucket(name);
}
}
public virtual async Task DeleteObjectAsync(GetOssObjectRequest request)
{
var ossClient = await CreateClientAsync();
var objectPath = GetBasePath(request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath + request.Object;
if (BucketExists(ossClient, request.Bucket) &&
ObjectExists(ossClient, request.Bucket, objectName))
{
var objectListing = ossClient.ListObjects(request.Bucket, objectName);
if (objectListing.CommonPrefixes.Any() ||
objectListing.ObjectSummaries.Any())
{
throw new BusinessException(code: OssManagementErrorCodes.ObjectDeleteWithNotEmpty);
// throw new ObjectDeleteWithNotEmptyException("00201", $"Can't not delete oss object {request.Object}, because it is not empty!");
}
ossClient.DeleteObject(request.Bucket, objectName);
}
}
public virtual async Task<bool> ExistsAsync(string name)
{
var ossClient = await CreateClientAsync();
return BucketExists(ossClient, name);
}
public virtual async Task<OssContainer> GetAsync(string name)
{
var ossClient = await CreateClientAsync();
if (!BucketExists(ossClient, name))
{
throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound);
// throw new ContainerNotFoundException($"Can't not found container {name} in aliyun blob storing");
}
var bucket = ossClient.GetBucketInfo(name);
return new OssContainer(
bucket.Bucket.Name,
bucket.Bucket.CreationDate,
0L,
bucket.Bucket.CreationDate,
new Dictionary<string, string>
{
{ "Id", bucket.Bucket.Owner?.Id },
{ "DisplayName", bucket.Bucket.Owner?.DisplayName }
});
}
public virtual async Task<OssObject> GetObjectAsync(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 aliyunOssObjectRequest = new GetObjectRequest(request.Bucket, objectName, request.Process);
var aliyunOssObject = ossClient.GetObject(aliyunOssObjectRequest);
var ossObject = new OssObject(
!objectPath.IsNullOrWhiteSpace()
? aliyunOssObject.Key.Replace(objectPath, "")
: aliyunOssObject.Key,
request.Path,
aliyunOssObject.Metadata.LastModified,
aliyunOssObject.Metadata.ContentLength,
aliyunOssObject.Metadata.LastModified,
aliyunOssObject.Metadata.UserMetadata,
aliyunOssObject.Key.EndsWith("/"))
{
FullName = aliyunOssObject.Key
};
if (aliyunOssObject.IsSetResponseStream())
{
var memoryStream = new MemoryStream();
await aliyunOssObject.Content.CopyToAsync(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
ossObject.SetContent(memoryStream);
}
return ossObject;
}
public virtual async Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{
var ossClient = await CreateClientAsync();
var aliyunRequest = new ListBucketsRequest
{
Marker = request.Marker,
Prefix = request.Prefix,
MaxKeys = request.MaxKeys
};
var bucketsResponse = ossClient.ListBuckets(aliyunRequest);
return new GetOssContainersResponse(
bucketsResponse.Prefix,
bucketsResponse.Marker,
bucketsResponse.NextMaker,
bucketsResponse.MaxKeys ?? 0,
bucketsResponse.Buckets
.Select(x => new OssContainer(
x.Name,
x.CreationDate,
0L,
x.CreationDate,
new Dictionary<string, string>
{
{ "Id", x.Owner?.Id },
{ "DisplayName", x.Owner?.DisplayName }
}))
.ToList());
}
public virtual async Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request)
{
var ossClient = await CreateClientAsync();
var objectPath = GetBasePath(request.Prefix);
var marker = !objectPath.IsNullOrWhiteSpace() && !request.Marker.IsNullOrWhiteSpace()
? request.Marker.Replace(objectPath, "")
: request.Marker;
var aliyunRequest = new ListObjectsRequest(request.BucketName)
{
Marker = !marker.IsNullOrWhiteSpace() ? objectPath + marker : marker,
Prefix = objectPath,
MaxKeys = request.MaxKeys,
EncodingType = request.EncodingType,
Delimiter = request.Delimiter
};
var objectsResponse = ossClient.ListObjects(aliyunRequest);
var ossObjects = objectsResponse.ObjectSummaries
.Where(x => !x.Key.Equals(objectsResponse.Prefix))// 过滤当前的目录返回值
.Select(x => new OssObject(
!objectPath.IsNullOrWhiteSpace() && !x.Key.Equals(objectPath)
? x.Key.Replace(objectPath, "")
: x.Key, // 去除目录名称
request.Prefix,
x.LastModified,
x.Size,
x.LastModified,
new Dictionary<string, string>
{
{ "Id", x.Owner?.Id },
{ "DisplayName", x.Owner?.DisplayName }
},
x.Key.EndsWith("/"))
{
FullName = x.Key
})
.ToList();
// 当 Delimiter 为 / 时, objectsResponse.CommonPrefixes 可用于代表层级目录
if (objectsResponse.CommonPrefixes.Any())
{
ossObjects.InsertRange(0,
objectsResponse.CommonPrefixes
.Select(x => new OssObject(
x.Replace(objectPath, ""),
request.Prefix,
null,
0L,
null,
null,
true)));
}
// 排序
// TODO: 是否需要客户端来排序
ossObjects.Sort(new OssObjectComparer());
return new GetOssObjectsResponse(
objectsResponse.BucketName,
request.Prefix,
marker,
!objectPath.IsNullOrWhiteSpace() && !objectsResponse.NextMarker.IsNullOrWhiteSpace()
? objectsResponse.NextMarker.Replace(objectPath, "")
: objectsResponse.NextMarker,
objectsResponse.Delimiter,
objectsResponse.MaxKeys,
ossObjects);
}
protected virtual string GetBasePath(string path)
{
string objectPath = "";
if (CurrentTenant.Id == null)
{
objectPath += "host/";
}
else
{
objectPath += "tenants/" + CurrentTenant.Id.Value.ToString("D");
}
objectPath += path ?? "";
return objectPath.EnsureEndsWith('/');
}
protected virtual bool BucketExists(IOss client, string bucketName)
{
return client.DoesBucketExist(bucketName);
}
protected virtual bool ObjectExists(IOss client, string bucketName, string objectName)
{
return client.DoesObjectExist(bucketName, objectName);
}
protected virtual async Task<IOss> CreateClientAsync()
{
return await OssClientFactory.CreateAsync<AbpOssManagementContainer>();
}
}
}

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

@ -0,0 +1,26 @@
using LINGYUN.Abp.BlobStoring.Aliyun;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.OssManagement.Aliyun
{
public class AliyunOssContainerFactory : IOssContainerFactory
{
protected ICurrentTenant CurrentTenant { get; }
protected IOssClientFactory OssClientFactory { get; }
public AliyunOssContainerFactory(
ICurrentTenant currentTenant,
IOssClientFactory ossClientFactory)
{
CurrentTenant = currentTenant;
OssClientFactory = ossClientFactory;
}
public IOssContainer Create()
{
return new AliyunOssContainer(
CurrentTenant,
OssClientFactory);
}
}
}

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.md

@ -0,0 +1,15 @@
# LINGYUN.Abp.OssManagement.Aliyun
阿里云oss容器接口
## 配置使用
模块按需引用
```csharp
[DependsOn(typeof(AbpOssManagementAliyunModule))]
public class YouProjectModule : AbpModule
{
// other
}
```

2
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN.Abp.FileManagement.Application.Contracts.csproj → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN.Abp.OssManagement.Application.Contracts.csproj

@ -12,7 +12,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.FileManagement.Domain.Shared\LINGYUN.Abp.FileManagement.Domain.Shared.csproj" /> <ProjectReference Include="..\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

12
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationContractsModule.cs

@ -0,0 +1,12 @@
using Volo.Abp.Application;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.OssManagement
{
[DependsOn(
typeof(AbpOssManagementDomainSharedModule),
typeof(AbpDddApplicationModule))]
public class AbpOssManagementApplicationContractsModule : AbpModule
{
}
}

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/BulkDeleteOssObjectInput.cs

@ -0,0 +1,15 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.OssManagement
{
public class BulkDeleteOssObjectInput
{
[Required]
public string Bucket { get; set; }
public string Path { get; set; }
[Required]
public string[] Objects { get; set; }
}
}

25
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs

@ -0,0 +1,25 @@
using System;
using System.IO;
using Volo.Abp.Auditing;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
public class CreateOssObjectInput
{
public string Bucket { get; set; }
public string Path { get; set; }
public string Object { get; set; }
[DisableAuditing]
[DisableValidation]
public Stream Content { get; set; }
public TimeSpan? ExpirationTime { get; set; }
public void SetContent(Stream content)
{
Content = content;
Content?.Seek(0, SeekOrigin.Begin);
}
}
}

73
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs

@ -0,0 +1,73 @@
using LINGYUN.Abp.OssManagement.Localization;
using Volo.Abp.Features;
using Volo.Abp.Localization;
using Volo.Abp.Validation.StringValues;
namespace LINGYUN.Abp.OssManagement.Features
{
public class AbpOssManagementFeatureDefinitionProvider : FeatureDefinitionProvider
{
public override void Define(IFeatureDefinitionContext context)
{
var featureGroup = context.AddGroup(
name: AbpOssManagementFeatureNames.GroupName,
displayName: L("Features:OssManagement"));
var ossFeature = featureGroup.AddFeature(
name: AbpOssManagementFeatureNames.OssObject.Default,
displayName: L("Features:DisplayName:OssObject"),
description: L("Features:Description:OssObject"));
ossFeature.CreateChild(
name: AbpOssManagementFeatureNames.OssObject.DownloadFile,
defaultValue: false.ToString(),
displayName: L("Features:DisplayName:DownloadFile"),
description: L("Features:Description:DownloadFile"),
valueType: new ToggleStringValueType(new BooleanValueValidator()));
ossFeature.CreateChild(
name: AbpOssManagementFeatureNames.OssObject.DownloadLimit,
defaultValue: "1000",
displayName: L("Features:DisplayName:DownloadLimit"),
description: L("Features:Description:DownloadLimit"),
valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用
ossFeature.CreateChild(
name: AbpOssManagementFeatureNames.OssObject.DownloadInterval,
defaultValue: "1",
displayName: L("Features:DisplayName:DownloadInterval"),
description: L("Features:Description:DownloadInterval"),
valueType: new FreeTextStringValueType(new NumericValueValidator(1, 12))); // 上限12月
ossFeature.CreateChild(
name: AbpOssManagementFeatureNames.OssObject.UploadFile,
defaultValue: true.ToString(),
displayName: L("Features:DisplayName:UploadFile"),
description: L("Features:Description:UploadFile"),
valueType: new ToggleStringValueType(new BooleanValueValidator()));
ossFeature.CreateChild(
name: AbpOssManagementFeatureNames.OssObject.UploadLimit,
defaultValue: "1000",
displayName: L("Features:DisplayName:UploadLimit"),
description: L("Features:Description:UploadLimit"),
valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用
ossFeature.CreateChild(
name: AbpOssManagementFeatureNames.OssObject.UploadInterval,
defaultValue: "1",
displayName: L("Features:DisplayName:UploadInterval"),
description: L("Features:Description:UploadInterval"),
valueType: new FreeTextStringValueType(new NumericValueValidator(1, 12))); // 上限12月
// TODO: 此功能需要控制器协同,暂时不实现
//fileSystemFeature.CreateChild(
// name: AbpOssManagementFeatureNames.OssObject.MaxUploadFileCount,
// defaultValue: 1.ToString(),
// displayName: L("Features:DisplayName:MaxUploadFileCount"),
// description: L("Features:Description:MaxUploadFileCount"),
// valueType: new FreeTextStringValueType(new NumericValueValidator(1, 10)));
}
protected ILocalizableString L(string name)
{
return LocalizableString.Create<AbpOssManagementResource>(name);
}
}
}

41
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs

@ -0,0 +1,41 @@
namespace LINGYUN.Abp.OssManagement.Features
{
public class AbpOssManagementFeatureNames
{
public const string GroupName = "AbpOssManagement";
public class OssObject
{
public const string Default = GroupName + ".OssObject";
/// <summary>
/// 下载文件功能
/// </summary>
public const string DownloadFile = Default + ".DownloadFile";
/// <summary>
/// 下载文件功能限制次数
/// </summary>
public const string DownloadLimit = Default + ".DownloadLimit";
/// <summary>
/// 下载文件功能限制次数周期
/// </summary>
public const string DownloadInterval = Default + ".DownloadInterval";
/// <summary>
/// 上传文件功能
/// </summary>
public const string UploadFile = Default + ".UploadFile";
/// <summary>
/// 上传文件功能限制次数
/// </summary>
public const string UploadLimit = Default + ".UploadLimit";
/// <summary>
/// 上传文件功能限制次数周期
/// </summary>
public const string UploadInterval = Default + ".UploadInterval";
/// <summary>
/// 最大上传文件
/// </summary>
public const string MaxUploadFileCount = Default + ".MaxUploadFileCount";
}
}
}

10
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssContainersInput.cs

@ -0,0 +1,10 @@
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.OssManagement
{
public class GetOssContainersInput : PagedAndSortedResultRequestDto
{
public string Prefix { get; set; }
public string Marker { get; set; }
}
}

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs

@ -0,0 +1,15 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.OssManagement
{
public class GetOssObjectInput
{
[Required]
public string Bucket { get; set; }
public string Path { get; set; }
[Required]
public string Object { get; set; }
}
}

13
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectsInput.cs

@ -0,0 +1,13 @@
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.OssManagement
{
public class GetOssObjectsInput : PagedAndSortedResultRequestDto
{
public string Bucket { get; set; }
public string Prefix { get; set; }
public string Delimiter { get; set; }
public string Marker { get; set; }
public string EncodingType { get; set; }
}
}

14
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Application.Contracts/LINGYUN/Abp/FileManagement/FileSystemGetDto.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetStaticFileInput.cs

@ -1,14 +1,16 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Abp.FileManagement namespace LINGYUN.Abp.OssManagement
{ {
public class FileSystemGetDto public class GetStaticFileInput
{ {
[StringLength(255)]
public string Path { get; set; }
[Required] [Required]
[StringLength(255)]
public string Name { get; set; } public string Name { get; set; }
public string Path { get; set; }
public string Bucket { get; set; }
public string Process { get; set; }
} }
} }

18
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssContainerAppService.cs

@ -0,0 +1,18 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.OssManagement
{
public interface IOssContainerAppService: IApplicationService
{
Task<OssContainerDto> CreateAsync(string name);
Task<OssContainerDto> GetAsync(string name);
Task DeleteAsync(string name);
Task<OssContainersResultDto> GetListAsync(GetOssContainersInput input);
Task<OssObjectsResultDto> GetObjectListAsync(GetOssObjectsInput input);
}
}

16
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssObjectAppService.cs

@ -0,0 +1,16 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.OssManagement
{
public interface IOssObjectAppService : IApplicationService
{
Task<OssObjectDto> CreateAsync(CreateOssObjectInput input);
Task<OssObjectDto> GetAsync(GetOssObjectInput input);
Task DeleteAsync(GetOssObjectInput input);
Task BulkDeleteAsync(BulkDeleteOssObjectInput input);
}
}

11
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs

@ -0,0 +1,11 @@
using System.IO;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.OssManagement
{
public interface IStaticFilesAppService: IApplicationService
{
Task<Stream> GetAsync(GetStaticFileInput input);
}
}

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainerDto.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
public class OssContainerDto
{
public string Name { get; set; }
public long Size { get; set; }
public DateTime CreationDate { get; set; }
public DateTime? LastModifiedDate { get; set; }
public IDictionary<string, string> Metadata { get; set; }
}
}

13
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainersResultDto.cs

@ -0,0 +1,13 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
public class OssContainersResultDto
{
public string Prefix { get; set; }
public string Marker { get; set; }
public string NextMarker { get; set; }
public int MaxKeys { get; set; }
public List<OssContainerDto> Containers { get; set; } = new List<OssContainerDto>();
}
}

7
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssManagementRemoteServiceConsts.cs

@ -0,0 +1,7 @@
namespace LINGYUN.Abp.OssManagement
{
public static class OssManagementRemoteServiceConsts
{
public const string RemoteServiceName = "AbpOssManagement";
}
}

16
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectDto.cs

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
public class OssObjectDto
{
public bool IsFolder { get; set; }
public string Path { get; set; }
public string Name { get; set; }
public long Size { get; set; }
public DateTime? CreationDate { get; set; }
public DateTime? LastModifiedDate { get; set; }
public IDictionary<string, string> Metadata { get; set; }
}
}

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectsResultDto.cs

@ -0,0 +1,15 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
public class OssObjectsResultDto
{
public string Bucket { get; set; }
public string Prefix { get; set; }
public string Delimiter { get; set; }
public string Marker { get; set; }
public string NextMarker { get; set; }
public int MaxKeys { get; set; }
public List<OssObjectDto> Objects { get; set; } = new List<OssObjectDto>();
}
}

28
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs

@ -0,0 +1,28 @@
using LINGYUN.Abp.OssManagement.Localization;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
namespace LINGYUN.Abp.OssManagement.Permissions
{
public class AbpOssManagementPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var ossManagement = context.AddGroup(AbpOssManagementPermissions.GroupName, L("Permission:OssManagement"));
var container = ossManagement.AddPermission(AbpOssManagementPermissions.Container.Default, L("Permission:Container"));
container.AddChild(AbpOssManagementPermissions.Container.Create, L("Permission:Create"));
container.AddChild(AbpOssManagementPermissions.Container.Delete, L("Permission:Delete"));
var ossobject = ossManagement.AddPermission(AbpOssManagementPermissions.OssObject.Default, L("Permission:OssObject"));
ossobject.AddChild(AbpOssManagementPermissions.OssObject.Create, L("Permission:Create"));
ossobject.AddChild(AbpOssManagementPermissions.OssObject.Delete, L("Permission:Delete"));
ossobject.AddChild(AbpOssManagementPermissions.OssObject.Download, L("Permission:Download"));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<AbpOssManagementResource>(name);
}
}
}

27
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissions.cs

@ -0,0 +1,27 @@
namespace LINGYUN.Abp.OssManagement.Permissions
{
public class AbpOssManagementPermissions
{
public const string GroupName = "AbpOssManagement";
public class Container
{
public const string Default = GroupName + ".Container";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
}
public class OssObject
{
public const string Default = GroupName + ".OssObject";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
public const string Download = Default + ".Download";
}
}
}

19
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AutoMapper" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj" />
</ItemGroup>
</Project>

23
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationModule.cs

@ -0,0 +1,23 @@
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Microsoft.Extensions.DependencyInjection;
namespace LINGYUN.Abp.OssManagement
{
[DependsOn(
typeof(AbpAutoMapperModule),
typeof(AbpOssManagementDomainModule),
typeof(AbpOssManagementApplicationContractsModule))]
public class AbpOssManagementApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAutoMapperObjectMapper<AbpOssManagementApplicationModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddProfile<OssManagementApplicationAutoMapperProfile>(validate: true);
});
}
}
}

70
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs

@ -0,0 +1,70 @@
using LINGYUN.Abp.OssManagement.Permissions;
using Microsoft.AspNetCore.Authorization;
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement
{
[Authorize(AbpOssManagementPermissions.Container.Default)]
public class OssContainerAppService : OssManagementApplicationServiceBase, IOssContainerAppService
{
protected IOssContainerFactory OssContainerFactory { get; }
public OssContainerAppService(
IOssContainerFactory ossContainerFactory)
{
OssContainerFactory = ossContainerFactory;
}
[Authorize(AbpOssManagementPermissions.Container.Create)]
public virtual async Task<OssContainerDto> CreateAsync(string name)
{
var oss = CreateOssContainer();
var container = await oss.CreateAsync(name);
return ObjectMapper.Map<OssContainer, OssContainerDto>(container);
}
[Authorize(AbpOssManagementPermissions.Container.Delete)]
public virtual async Task DeleteAsync(string name)
{
var oss = CreateOssContainer();
await oss.DeleteAsync(name);
}
public virtual async Task<OssContainerDto> GetAsync(string name)
{
var oss = CreateOssContainer();
var container = await oss.GetAsync(name);
return ObjectMapper.Map<OssContainer, OssContainerDto>(container);
}
public virtual async Task<OssContainersResultDto> GetListAsync(GetOssContainersInput input)
{
var oss = CreateOssContainer();
var containerResponse = await oss.GetListAsync(
input.Prefix, input.Marker, input.MaxResultCount);
return ObjectMapper.Map<GetOssContainersResponse, OssContainersResultDto>(containerResponse);
}
public virtual async Task<OssObjectsResultDto> GetObjectListAsync(GetOssObjectsInput input)
{
var oss = CreateOssContainer();
var ossObjectResponse = await oss.GetObjectsAsync(
input.Bucket, input.Prefix, input.Marker,
input.Delimiter, input.EncodingType,
input.MaxResultCount);
return ObjectMapper.Map<GetOssObjectsResponse, OssObjectsResultDto>(ossObjectResponse);
}
protected virtual IOssContainer CreateOssContainer()
{
return OssContainerFactory.Create();
}
}
}

17
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationAutoMapperProfile.cs

@ -0,0 +1,17 @@
using AutoMapper;
namespace LINGYUN.Abp.OssManagement
{
public class OssManagementApplicationAutoMapperProfile : Profile
{
public OssManagementApplicationAutoMapperProfile()
{
CreateMap<OssContainer, OssContainerDto>();
CreateMap<OssObject, OssObjectDto>()
.ForMember(dto => dto.Path, map => map.MapFrom(src => src.Prefix));
CreateMap<GetOssContainersResponse, OssContainersResultDto>();
CreateMap<GetOssObjectsResponse, OssObjectsResultDto>();
}
}
}

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationServiceBase.cs

@ -0,0 +1,14 @@
using LINGYUN.Abp.OssManagement.Localization;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.OssManagement
{
public class OssManagementApplicationServiceBase : ApplicationService
{
protected OssManagementApplicationServiceBase()
{
LocalizationResource = typeof(AbpOssManagementResource);
ObjectMapperContext = typeof(AbpOssManagementApplicationModule);
}
}
}

113
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs

@ -0,0 +1,113 @@
using LINGYUN.Abp.Features.LimitValidation;
using LINGYUN.Abp.OssManagement.Features;
using LINGYUN.Abp.OssManagement.Permissions;
using LINGYUN.Abp.OssManagement.Settings;
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Features;
using Volo.Abp.IO;
using Volo.Abp.Settings;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
[Authorize(AbpOssManagementPermissions.OssObject.Default)]
public class OssObjectAppService : OssManagementApplicationServiceBase, IOssObjectAppService
{
protected IOssContainerFactory OssContainerFactory { get; }
public OssObjectAppService(
IOssContainerFactory ossContainerFactory)
{
OssContainerFactory = ossContainerFactory;
}
[Authorize(AbpOssManagementPermissions.OssObject.Create)]
[RequiresFeature(AbpOssManagementFeatureNames.OssObject.UploadFile)]
[RequiresLimitFeature(
AbpOssManagementFeatureNames.OssObject.UploadLimit,
AbpOssManagementFeatureNames.OssObject.UploadInterval,
LimitPolicy.Month)]
public virtual async Task<OssObjectDto> CreateAsync(CreateOssObjectInput input)
{
if (!input.Content.IsNullOrEmpty())
{
// 检查文件大小
var fileSizeLimited = await SettingProvider
.GetAsync(
AbpOssManagementSettingNames.FileLimitLength,
AbpOssManagementSettingNames.DefaultFileLimitLength);
if (fileSizeLimited * 1024 * 1024 < input.Content.Length)
{
ThrowValidationException(L["UploadFileSizeBeyondLimit", fileSizeLimited], nameof(input.Content));
}
// 文件扩展名
var fileExtensionName = FileHelper.GetExtension(input.Object);
var fileAllowExtension = await SettingProvider.GetOrNullAsync(AbpOssManagementSettingNames.AllowFileExtensions);
// 检查文件扩展名
if (!fileAllowExtension.Split(',')
.Any(fe => fe.Equals(fileExtensionName, StringComparison.CurrentCultureIgnoreCase)))
{
ThrowValidationException(L["NotAllowedFileExtensionName", fileExtensionName], "FileName");
}
}
var oss = CreateOssContainer();
var createOssObjectRequest = new CreateOssObjectRequest(
input.Bucket,
input.Object,
input.Content,
input.Path,
input.ExpirationTime);
var ossObject = await oss.CreateObjectAsync(createOssObjectRequest);
return ObjectMapper.Map<OssObject, OssObjectDto>(ossObject);
}
[Authorize(AbpOssManagementPermissions.OssObject.Delete)]
public virtual async Task BulkDeleteAsync(BulkDeleteOssObjectInput input)
{
var oss = CreateOssContainer();
await oss.BulkDeleteObjectsAsync(input.Bucket, input.Objects, input.Path);
}
[Authorize(AbpOssManagementPermissions.OssObject.Delete)]
public virtual async Task DeleteAsync(GetOssObjectInput input)
{
var oss = CreateOssContainer();
await oss.DeleteObjectAsync(input.Bucket, input.Object, input.Path);
}
public virtual async Task<OssObjectDto> GetAsync(GetOssObjectInput input)
{
var oss = CreateOssContainer();
var ossObject = await oss.GetObjectAsync(input.Bucket, input.Object, input.Path);
return ObjectMapper.Map<OssObject, OssObjectDto>(ossObject);
}
protected virtual IOssContainer CreateOssContainer()
{
return OssContainerFactory.Create();
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
{
new ValidationResult(message, new[] {memberName})
});
}
}
}

39
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs

@ -0,0 +1,39 @@
using LINGYUN.Abp.Features.LimitValidation;
using LINGYUN.Abp.OssManagement.Features;
using System.IO;
using System.Threading.Tasks;
using System.Web;
using Volo.Abp.Features;
namespace LINGYUN.Abp.OssManagement
{
public class StaticFilesAppService : OssManagementApplicationServiceBase, IStaticFilesAppService
{
protected IOssContainerFactory OssContainerFactory { get; }
public StaticFilesAppService(
IOssContainerFactory ossContainerFactory)
{
OssContainerFactory = ossContainerFactory;
}
[RequiresFeature(AbpOssManagementFeatureNames.OssObject.DownloadFile)]
[RequiresLimitFeature(
AbpOssManagementFeatureNames.OssObject.DownloadLimit,
AbpOssManagementFeatureNames.OssObject.DownloadInterval,
LimitPolicy.Month)]
public virtual async Task<Stream> GetAsync(GetStaticFileInput input)
{
var ossObjectRequest = new GetOssObjectRequest(
HttpUtility.UrlDecode(input.Bucket), // 需要处理特殊字符
HttpUtility.UrlDecode(input.Name),
HttpUtility.UrlDecode(input.Path),
HttpUtility.UrlDecode(input.Process));
var ossContainer = OssContainerFactory.Create();
var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest);
return ossObject.Content;
}
}
}

8
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN.Abp.FileManagement.Domain.Shared.csproj → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN.Abp.OssManagement.Domain.Shared.csproj

@ -8,13 +8,13 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<None Remove="LINGYUN\Abp\FileManagement\Localization\Resources\en.json" /> <None Remove="LINGYUN\Abp\OssManagement\Localization\Resources\en.json" />
<None Remove="LINGYUN\Abp\FileManagement\Localization\Resources\zh-Hans.json" /> <None Remove="LINGYUN\Abp\OssManagement\Localization\Resources\zh-Hans.json" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="LINGYUN\Abp\FileManagement\Localization\Resources\en.json" /> <EmbeddedResource Include="LINGYUN\Abp\OssManagement\Localization\Resources\en.json" />
<EmbeddedResource Include="LINGYUN\Abp\FileManagement\Localization\Resources\zh-Hans.json" /> <EmbeddedResource Include="LINGYUN\Abp\OssManagement\Localization\Resources\zh-Hans.json" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

36
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/AbpOssManagementDomainSharedModule.cs

@ -0,0 +1,36 @@
using LINGYUN.Abp.OssManagement.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Localization.ExceptionHandling;
using Volo.Abp.Modularity;
using Volo.Abp.Validation;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
namespace LINGYUN.Abp.OssManagement
{
[DependsOn(typeof(AbpValidationModule))]
public class AbpOssManagementDomainSharedModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpOssManagementDomainSharedModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<AbpOssManagementResource>("en")
.AddBaseTypes(
typeof(AbpValidationResource)
).AddVirtualJson("/LINGYUN/Abp/OssManagement/Localization/Resources");
});
Configure<AbpExceptionLocalizationOptions>(options =>
{
options.MapCodeNamespace(OssManagementErrorCodes.Namespace, typeof(AbpOssManagementResource));
});
}
}
}

9
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/AbpOssManagementResource.cs

@ -0,0 +1,9 @@
using Volo.Abp.Localization;
namespace LINGYUN.Abp.OssManagement.Localization
{
[LocalizationResourceName("AbpOssManagement")]
public class AbpOssManagementResource
{
}
}

51
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/en.json

@ -0,0 +1,51 @@
{
"culture": "en",
"texts": {
"Abp.FileManagement:010001": "Cannot delete a container that has more than one object!",
"Abp.FileManagement:010402": "The container name already exists!",
"Abp.FileManagement:010404": "The queried container could not be found!",
"Abp.FileManagement:020001": "An object that has more than one child cannot be deleted!",
"Abp.FileManagement:020402": "The object name already exists!",
"Abp.FileManagement:020404": "The queried object could not be found!",
"Abp.FileManagement:000405": "The path object name has exceeded the allowable maximum length and cannot continue to create a new object!",
"Permission:OssManagement": "Object Storage",
"Permission:Container": "Containers",
"Permission:OssObject": "Objects",
"Permission:Create": "Create",
"Permission:Delete": "Delete",
"Permission:Upload": "Upload",
"Permission:Download": "Download",
"FileNotFound": "The specified file does not exist!",
"PathNotFound": "The specified directory does not exist!",
"FilePathNotFound": "The file or directory does not exist!",
"PathAlreadyExists": "The specified directory already exists!",
"PathCannotBeDeletedWithNotEmpty": "The specified directory is not empty and cannot be deleted!",
"FilePathAlreadyExists": "The same file or directory already exists in the specified path!",
"UploadFileSizeBeyondLimit": "Upload file size cannot exceed {0} MB!",
"NotAllowedFileExtensionName": "Not allowed file extension: {0}!",
"DisplayName:OssManagement": "Object Storage",
"Description:OssManagement": "Object Storage",
"DisplayName:OssObject": "Objects",
"Description:OssObject": "Objects",
"DisplayName:FileLimitLength": "File limit size",
"Description:FileLimitLength": "Limit size of uploaded file in MB",
"DisplayName:AllowFileExtensions": "File extension",
"Description:AllowFileExtensions": "List of allowed extensions to upload files, with multiple extensions separated by, don't need a notation",
"Features:FileManagement": "File management",
"Features:DisplayName:FileSystem": "File system",
"Features:DisplayName:DownloadFile": "Download file",
"Features:Description:DownloadFile": "Whether to allow users to download files",
"Features:DisplayName:DownloadLimit": "Limit Of Downloads",
"Features:Description:DownloadLimit": "Limits the total number of times a file is downloaded within a specified period",
"Features:DisplayName:DownloadInterval": "Limit Downloads Interval",
"Features:Description:DownloadInterval": "The update period that limits the number of files downloaded. The time scale is: month. Default: 1",
"Features:DisplayName:UploadFile": "Upload file",
"Features:Description:UploadFile": "Whether to allow users to upload files",
"Features:DisplayName:UploadLimit": "Limit Of Uploads",
"Features:Description:UploadLimit": "Limits the total number of file uploads within a specified period",
"Features:DisplayName:UploadInterval": "Limit Uploads Interval",
"Features:Description:UploadInterval": "The update period that limits the number of files uploaded. The time scale is: month. Default: 1",
"Features:DisplayName:MaxUploadFileCount": "Maximum number of upload files",
"Features:Description:MaxUploadFileCount": "Limit the number of files a user uploads at a time"
}
}

51
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/zh-Hans.json

@ -0,0 +1,51 @@
{
"culture": "zh-Hans",
"texts": {
"Abp.FileManagement:010001": "不能删除存在多个对象的容器!",
"Abp.FileManagement:010402": "容器名称已经存在!",
"Abp.FileManagement:010404": "未能找到查询的容器!",
"Abp.FileManagement:020001": "不能删除存在多个子级的对象!",
"Abp.FileManagement:020402": "对象名称已经存在!",
"Abp.FileManagement:020404": "未能找到查询的对象!",
"Abp.FileManagement:000405": "此路径对象名称已超出允许的最大长度,无法继续创建新对象!",
"Permission:OssManagement": "对象存储",
"Permission:Container": "容器管理",
"Permission:OssObject": "对象管理",
"Permission:Create": "新增",
"Permission:Delete": "删除",
"Permission:Upload": "上传",
"Permission:Download": "下载",
"FileNotFound": "指定的文件不存在!",
"PathNotFound": "指定的目录不存在!",
"FilePathNotFound": "文件或目录不存在!",
"PathAlreadyExists": "指定的目录已经存在!",
"PathCannotBeDeletedWithNotEmpty": "指定的目录不为空,不可删除此目录!",
"FilePathAlreadyExists": "指定的路径中已经有相同的文件或目录存在!",
"UploadFileSizeBeyondLimit": "上传文件大小不能超过 {0} MB!",
"NotAllowedFileExtensionName": "不被允许的文件扩展名: {0}!",
"DisplayName:OssManagement": "对象存储",
"Description:OssManagement": "对象存储",
"DisplayName:OssObject": "Oss对象",
"Description:OssObject": "Oss对象",
"DisplayName:FileLimitLength": "文件限制大小",
"Description:FileLimitLength": "上传文件的限制大小,单位(MB)",
"DisplayName:AllowFileExtensions": "文件扩展名",
"Description:AllowFileExtensions": "允许的上传文件扩展名列表,多个扩展名以,分隔,无需输入.符号",
"Features:OssManagement": "对象存储",
"Features:DisplayName:OssObject": "Oss管理",
"Features:DisplayName:DownloadFile": "下载文件",
"Features:Description:DownloadFile": "是否允许用户下载文件",
"Features:DisplayName:DownloadLimit": "限制下载文件次数",
"Features:Description:DownloadLimit": "在指定的周期内限制下载文件的总次数",
"Features:DisplayName:DownloadInterval": "限制下载文件周期",
"Features:Description:DownloadInterval": "限制下载文件次数的更新周期,时间刻度为:月,默认:1",
"Features:DisplayName:UploadFile": "上传文件",
"Features:Description:UploadFile": "是否允许用户上传文件",
"Features:DisplayName:UploadLimit": "限制上传文件次数",
"Features:Description:UploadLimit": "在指定的周期内限制上传文件的总次数",
"Features:DisplayName:UploadInterval": "限制上传文件周期",
"Features:Description:UploadInterval": "限制上传文件次数的更新周期,时间刻度为:月,默认:1",
"Features:DisplayName:MaxUploadFileCount": "上传文件数量",
"Features:Description:MaxUploadFileCount": "用户单次上传文件的限制数量"
}
}

17
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssManagementErrorCodes.cs

@ -0,0 +1,17 @@
namespace LINGYUN.Abp.OssManagement
{
public static class OssManagementErrorCodes
{
public const string Namespace = "Abp.OssManagement";
public const string ContainerDeleteWithNotEmpty = Namespace + ":010001";
public const string ContainerAlreadyExists = Namespace + ":010402";
public const string ContainerNotFound = Namespace + ":010404";
public const string ObjectDeleteWithNotEmpty = Namespace + ":020001";
public const string ObjectAlreadyExists = Namespace + ":020402";
public const string ObjectNotFound = Namespace + ":020404";
public const string OssNameHasTooLong = Namespace + ":000405";
}
}

16
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Settings/AbpFileManagementSettingDefinitionProvider.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs

@ -1,10 +1,10 @@
using LINGYUN.Abp.FileManagement.Localization; using LINGYUN.Abp.OssManagement.Localization;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Settings; using Volo.Abp.Settings;
namespace LINGYUN.Abp.FileManagement.Settings namespace LINGYUN.Abp.OssManagement.Settings
{ {
public class AbpFileManagementSettingDefinitionProvider : SettingDefinitionProvider public class AbpOssManagementSettingDefinitionProvider : SettingDefinitionProvider
{ {
public override void Define(ISettingDefinitionContext context) public override void Define(ISettingDefinitionContext context)
{ {
@ -16,8 +16,8 @@ namespace LINGYUN.Abp.FileManagement.Settings
return new SettingDefinition[] return new SettingDefinition[]
{ {
new SettingDefinition( new SettingDefinition(
name: AbpFileManagementSettingNames.FileLimitLength, name: AbpOssManagementSettingNames.FileLimitLength,
defaultValue: AbpFileManagementSettingNames.DefaultFileLimitLength.ToString(), defaultValue: AbpOssManagementSettingNames.DefaultFileLimitLength.ToString(),
displayName: L("DisplayName:FileLimitLength"), displayName: L("DisplayName:FileLimitLength"),
description: L("Description:FileLimitLength"), description: L("Description:FileLimitLength"),
isVisibleToClients: true) isVisibleToClients: true)
@ -25,8 +25,8 @@ namespace LINGYUN.Abp.FileManagement.Settings
GlobalSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName), TenantSettingValueProvider.ProviderName),
new SettingDefinition( new SettingDefinition(
name: AbpFileManagementSettingNames.AllowFileExtensions, name: AbpOssManagementSettingNames.AllowFileExtensions,
defaultValue: AbpFileManagementSettingNames.DefaultAllowFileExtensions, defaultValue: AbpOssManagementSettingNames.DefaultAllowFileExtensions,
displayName: L("DisplayName:AllowFileExtensions"), displayName: L("DisplayName:AllowFileExtensions"),
description: L("Description:AllowFileExtensions"), description: L("Description:AllowFileExtensions"),
isVisibleToClients: true) isVisibleToClients: true)
@ -38,7 +38,7 @@ namespace LINGYUN.Abp.FileManagement.Settings
protected LocalizableString L(string name) protected LocalizableString L(string name)
{ {
return LocalizableString.Create<AbpFileManagementResource>(name); return LocalizableString.Create<AbpOssManagementResource>(name);
} }
} }
} }

10
aspnet-core/modules/file-management/LINGYUN.Abp.FileManagement.Domain.Shared/LINGYUN/Abp/FileManagement/Settings/AbpFileManagementSettingNames.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingNames.cs

@ -1,8 +1,12 @@
namespace LINGYUN.Abp.FileManagement.Settings namespace LINGYUN.Abp.OssManagement.Settings
{ {
public class AbpFileManagementSettingNames public class AbpOssManagementSettingNames
{ {
public const string GroupName = "Abp.FileManagement"; public const string GroupName = "Abp.OssManagement";
/// <summary>
/// 下载分包大小
/// </summary>
public const string DownloadPackageSize = GroupName + ".DownloadPackageSize";
/// <summary> /// <summary>
/// 文件限制长度 /// 文件限制长度
/// </summary> /// </summary>

12
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/System/IO/StreamExtensions.cs

@ -0,0 +1,12 @@
namespace System.IO
{
public static class StreamExtensions
{
public static bool IsNullOrEmpty(
this Stream stream)
{
return stream == null ||
Equals(stream, Stream.Null);
}
}
}

20
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN.Abp.OssManagement.Domain.csproj

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.BlobStoring" Version="4.2.1" />
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj" />
</ItemGroup>
</Project>

9
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementContainer.cs

@ -0,0 +1,9 @@
using Volo.Abp.BlobStoring;
namespace LINGYUN.Abp.OssManagement
{
[BlobContainerName("abp-oss-management")]
public class AbpOssManagementContainer
{
}
}

17
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementDomainModule.cs

@ -0,0 +1,17 @@
using LINGYUN.Abp.Features.LimitValidation;
using Volo.Abp.Domain;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.OssManagement
{
[DependsOn(
typeof(AbpDddDomainModule),
typeof(AbpMultiTenancyModule),
typeof(AbpFeaturesLimitValidationModule),
typeof(AbpOssManagementDomainSharedModule)
)]
public class AbpOssManagementDomainModule : AbpModule
{
}
}

26
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/BulkDeleteObjectRequest.cs

@ -0,0 +1,26 @@
using JetBrains.Annotations;
using System.Collections.Generic;
using Volo.Abp;
namespace LINGYUN.Abp.OssManagement
{
public class BulkDeleteObjectRequest
{
public string Bucket { get; }
public string Path { get; }
public ICollection<string> Objects { get; }
public BulkDeleteObjectRequest(
[NotNull] string bucket,
ICollection<string> objects,
string path = "")
{
Check.NotNullOrWhiteSpace(bucket, nameof(bucket));
Check.NotNullOrEmpty(objects, nameof(objects));
Bucket = bucket;
Objects = objects;
Path = path;
}
}
}

35
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/CreateOssObjectRequest.cs

@ -0,0 +1,35 @@
using JetBrains.Annotations;
using System;
using System.IO;
using Volo.Abp;
namespace LINGYUN.Abp.OssManagement
{
public class CreateOssObjectRequest
{
public string Bucket { get; }
public string Path { get; }
public string Object { get; }
public Stream Content { get; private set; }
public TimeSpan? ExpirationTime { get; }
public CreateOssObjectRequest(
[NotNull] string bucket,
[NotNull] string @object,
[CanBeNull] Stream content,
[CanBeNull] string path = null,
[CanBeNull] TimeSpan? expirationTime = null)
{
Bucket = Check.NotNullOrWhiteSpace(bucket, nameof(bucket));
Object = Check.NotNullOrWhiteSpace(@object, nameof(@object));
Path = path;
Content = content;
ExpirationTime = expirationTime;
}
public void SetContent(Stream content)
{
Content = content;
}
}
}

18
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs

@ -0,0 +1,18 @@
namespace LINGYUN.Abp.OssManagement
{
public class GetOssContainersRequest
{
public string Prefix { get; }
public string Marker { get; }
public int? MaxKeys { get; }
public GetOssContainersRequest(
string prefix = null,
string marker = null,
int? maxKeys = 10)
{
Prefix = prefix;
Marker = marker;
MaxKeys = maxKeys;
}
}
}

28
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersResponse.cs

@ -0,0 +1,28 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
public class GetOssContainersResponse
{
public string Prefix { get; }
public string Marker { get; }
public string NextMarker { get; }
public int MaxKeys { get; }
public List<OssContainer> Containers { get; }
public GetOssContainersResponse(
string prefix,
string marker,
string nextMarker,
int maxKeys,
List<OssContainer> containers)
{
Prefix = prefix;
Marker = marker;
NextMarker = nextMarker;
MaxKeys = maxKeys;
Containers = containers;
}
}
}

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

@ -0,0 +1,31 @@
using JetBrains.Annotations;
using Volo.Abp;
namespace LINGYUN.Abp.OssManagement
{
public class GetOssObjectRequest
{
public string Bucket { get; }
public string Path { get; }
public string Object { get; }
/// <summary>
/// 需要处理文件的参数
/// </summary>
public string Process { get; }
public GetOssObjectRequest(
[NotNull] string bucket,
[NotNull] string @object,
[CanBeNull] string path = "",
[CanBeNull] string process = "")
{
Check.NotNullOrWhiteSpace(bucket, nameof(bucket));
Check.NotNullOrWhiteSpace(@object, nameof(@object));
Bucket = bucket;
Object = @object;
Path = path;
Process = process;
}
}
}

32
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs

@ -0,0 +1,32 @@
using JetBrains.Annotations;
using Volo.Abp;
namespace LINGYUN.Abp.OssManagement
{
public class GetOssObjectsRequest
{
public string BucketName { get; }
public string Prefix { get; }
public string Delimiter { get; }
public string Marker { get; }
public string EncodingType { get; }
public int? MaxKeys { get; }
public GetOssObjectsRequest(
[NotNull] string bucketName,
string prefix = null,
string marker = null,
string delimiter = null,
string encodingType = null,
int maxKeys = 10)
{
Check.NotNullOrWhiteSpace(bucketName, nameof(bucketName));
BucketName = bucketName;
Prefix = prefix;
Marker = marker;
Delimiter = delimiter;
EncodingType = encodingType;
MaxKeys = maxKeys;
}
}
}

33
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsResponse.cs

@ -0,0 +1,33 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
public class GetOssObjectsResponse
{
public string Bucket { get; }
public string Prefix { get; }
public string Delimiter { get; }
public string Marker { get; }
public string NextMarker { get; }
public int MaxKeys { get; }
public List<OssObject> Objects { get; }
public GetOssObjectsResponse(
string bucket,
string prefix,
string marker,
string nextMarker,
string delimiter,
int maxKeys,
List<OssObject> ossObjects)
{
Bucket = bucket;
Prefix = prefix;
Marker = marker;
NextMarker = nextMarker;
Delimiter = delimiter;
MaxKeys = maxKeys;
Objects = ossObjects;
}
}
}

72
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs

@ -0,0 +1,72 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement
{
/// <summary>
/// Oss容器
/// </summary>
public interface IOssContainer
{
/// <summary>
/// 创建容器
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
Task<OssContainer> CreateAsync(string name);
/// <summary>
/// 创建Oss对象
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request);
/// <summary>
/// 获取容器信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
Task<OssContainer> GetAsync(string name);
/// <summary>
/// 获取Oss对象信息
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<OssObject> GetObjectAsync(GetOssObjectRequest request);
/// <summary>
/// 删除容器
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
Task DeleteAsync(string name);
/// <summary>
/// 删除Oss对象
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task DeleteObjectAsync(GetOssObjectRequest request);
/// <summary>
/// 批量删除Oss对象
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request);
/// <summary>
/// 容器是否存在
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
Task<bool> ExistsAsync(string name);
/// <summary>
/// 获取容器列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request);
/// <summary>
/// 获取对象列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<GetOssObjectsResponse> GetObjectsAsync(GetOssObjectsRequest request);
// Task<List<OssObject>> GetObjectsAsync(string name, string prefix = null, string marker = null, string delimiter = null, int maxResultCount = 10);
}
}

79
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerExtensions.cs

@ -0,0 +1,79 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement
{
public static class IOssContainerExtensions
{
/// <summary>
/// 如果不存在容器则创建
/// </summary>
/// <param name="ossContainer"></param>
/// <param name="name"></param>
/// <returns>返回容器信息</returns>
public static async Task<OssContainer> CreateIfNotExistsAsync(
this IOssContainer ossContainer,
string name)
{
if (! await ossContainer.ExistsAsync(name))
{
await ossContainer.CreateAsync(name);
}
return await ossContainer.GetAsync(name);
}
public static async Task DeleteObjectAsync(
this IOssContainer ossContainer,
string bucket,
string @object,
string path = "")
{
await ossContainer.DeleteObjectAsync(
new GetOssObjectRequest(bucket, @object, path));
}
public static async Task BulkDeleteObjectsAsync(
this IOssContainer ossContainer,
string bucketName,
ICollection<string> objectNames,
string path = "")
{
await ossContainer.BulkDeleteObjectsAsync(
new BulkDeleteObjectRequest(bucketName, objectNames, path));
}
public static async Task<GetOssContainersResponse> GetListAsync(
this IOssContainer ossContainer,
string prefix = null,
string marker = null,
int maxResultCount = 10)
{
return await ossContainer.GetListAsync(
new GetOssContainersRequest(prefix, marker, maxResultCount));
}
public static async Task<OssObject> GetObjectAsync(
this IOssContainer ossContainer,
string bucket,
string @object,
string path = "")
{
return await ossContainer.GetObjectAsync(
new GetOssObjectRequest(bucket, @object, path));
}
public static async Task<GetOssObjectsResponse> GetObjectsAsync(
this IOssContainer ossContainer,
string name,
string prefix = null,
string marker = null,
string delimiter = null,
string encodingType = null,
int maxResultCount = 10)
{
return await ossContainer.GetObjectsAsync(
new GetOssObjectsRequest(name, prefix, marker, delimiter, encodingType, maxResultCount));
}
}
}

18
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerFactory.cs

@ -0,0 +1,18 @@
namespace LINGYUN.Abp.OssManagement
{
/// <summary>
/// Oss容器构建工厂
/// </summary>
public interface IOssContainerFactory
{
IOssContainer Create();
}
/// <summary>
/// Oss容器构建工厂
/// </summary>
public interface IOssContainerFactory<TConfiguration>
{
IOssContainer Create(TConfiguration configuration);
}
}

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

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
/// <summary>
/// 描述了一个容器的状态信息
/// </summary>
public class OssContainer
{
public string Name { get; }
public long Size { get; }
public DateTime CreationDate { get; }
public DateTime? LastModifiedDate { get; }
public IDictionary<string, string> Metadata { get; }
public OssContainer(
string name,
DateTime creationDate,
long size = 0,
DateTime? lastModifiedDate = null,
IDictionary<string, string> metadata = null)
{
Name = name;
CreationDate = creationDate;
LastModifiedDate = lastModifiedDate;
Size = size;
Metadata = metadata ?? new Dictionary<string, string>();
}
}
}

50
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObject.cs

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace LINGYUN.Abp.OssManagement
{
/// <summary>
/// 描述了一个对象的状态信息
/// </summary>
public class OssObject
{
private Stream _content;
public bool IsFolder { get; }
public string Name { get; }
public string FullName { get; set; }
public string Prefix { get; }
public long Size { get; }
public Stream Content => _content;
public DateTime? CreationDate { get; }
public DateTime? LastModifiedDate { get; }
public IDictionary<string, string> Metadata { get; }
public OssObject(
string name,
string prefix,
DateTime? creationDate = null,
long size = 0,
DateTime? lastModifiedDate = null,
IDictionary<string, string> metadata = null,
bool isFolder = false)
{
Name = name;
Prefix = prefix;
CreationDate = creationDate;
LastModifiedDate = lastModifiedDate;
Size = size;
IsFolder = isFolder;
Metadata = metadata ?? new Dictionary<string, string>();
}
public void SetContent(Stream stream)
{
_content = stream;
if (!_content.IsNullOrEmpty())
{
_content.Seek(0, SeekOrigin.Begin);
}
}
}
}

27
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectComparer.cs

@ -0,0 +1,27 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.OssManagement
{
public class OssObjectComparer : IComparer<OssObject>
{
public virtual int Compare(OssObject x, OssObject y)
{
if (x.IsFolder && y.IsFolder)
{
return x.Name.CompareTo(y.Name);
}
if (x.IsFolder && !y.IsFolder)
{
return -1;
}
if (!x.IsFolder && y.IsFolder)
{
return 1;
}
return x.Name.CompareTo(y.Name);
}
}
}

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

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta11" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj" />
</ItemGroup>
</Project>

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

@ -0,0 +1,16 @@
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());
});
}
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save