SysFileProviderController.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
  2. //
  3. // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
  6. namespace Admin.NET.Core.Service;
  7. /// <summary>
  8. /// 文件存储提供者管理控制器 🧩
  9. /// </summary>
  10. [ApiDescriptionSettings(Order = 412, Description = "文件存储提供者管理")]
  11. public class SysFileProviderController : IDynamicApiController, ITransient
  12. {
  13. private readonly SysFileProviderService _fileProviderService;
  14. public SysFileProviderController(SysFileProviderService fileProviderService)
  15. {
  16. _fileProviderService = fileProviderService;
  17. }
  18. /// <summary>
  19. /// 获取存储提供者列表 🔖
  20. /// </summary>
  21. /// <returns></returns>
  22. [DisplayName("获取存储提供者列表")]
  23. public async Task<List<SysFileProvider>> GetProviderList()
  24. {
  25. return await _fileProviderService.GetFileProviderList();
  26. }
  27. /// <summary>
  28. /// 获取存储提供者分页列表 🔖
  29. /// </summary>
  30. /// <param name="input"></param>
  31. /// <returns></returns>
  32. [DisplayName("获取存储提供者分页列表")]
  33. public async Task<SqlSugarPagedList<SysFileProvider>> GetProviderPage(PageFileProviderInput input)
  34. {
  35. return await _fileProviderService.GetFileProviderPage(input);
  36. }
  37. /// <summary>
  38. /// 获取存储提供者详情 🔖
  39. /// </summary>
  40. /// <param name="input"></param>
  41. /// <returns></returns>
  42. [DisplayName("获取存储提供者详情")]
  43. public async Task<SysFileProvider> GetProvider([FromQuery] QueryFileProviderInput input)
  44. {
  45. return await _fileProviderService.GetFileProvider(input);
  46. }
  47. /// <summary>
  48. /// 添加存储提供者 🔖
  49. /// </summary>
  50. /// <param name="input"></param>
  51. /// <returns></returns>
  52. [ApiDescriptionSettings(Name = "Add"), HttpPost]
  53. [DisplayName("添加存储提供者")]
  54. public async Task AddProvider(AddFileProviderInput input)
  55. {
  56. await _fileProviderService.AddFileProvider(input);
  57. }
  58. /// <summary>
  59. /// 更新存储提供者 🔖
  60. /// </summary>
  61. /// <param name="input"></param>
  62. /// <returns></returns>
  63. [ApiDescriptionSettings(Name = "Update"), HttpPost]
  64. [DisplayName("更新存储提供者")]
  65. public async Task UpdateProvider(UpdateFileProviderInput input)
  66. {
  67. await _fileProviderService.UpdateFileProvider(input);
  68. }
  69. /// <summary>
  70. /// 删除存储提供者 🔖
  71. /// </summary>
  72. /// <param name="input"></param>
  73. /// <returns></returns>
  74. [ApiDescriptionSettings(Name = "Delete"), HttpPost]
  75. [DisplayName("删除存储提供者")]
  76. public async Task DeleteProvider(DeleteFileProviderInput input)
  77. {
  78. await _fileProviderService.DeleteFileProvider(input);
  79. }
  80. /// <summary>
  81. /// 根据存储桶名称获取存储提供者 🔖
  82. /// </summary>
  83. /// <param name="bucketName">存储桶名称</param>
  84. /// <returns></returns>
  85. [DisplayName("根据存储桶名称获取存储提供者")]
  86. public async Task<SysFileProvider?> GetProviderByBucketName(string bucketName)
  87. {
  88. return await _fileProviderService.GetProviderByBucketName(bucketName);
  89. }
  90. /// <summary>
  91. /// 清除存储提供者缓存 🔖
  92. /// </summary>
  93. /// <returns></returns>
  94. [DisplayName("清除存储提供者缓存")]
  95. public async Task ClearCache()
  96. {
  97. await _fileProviderService.ClearCache();
  98. }
  99. /// <summary>
  100. /// 批量启用/禁用存储提供者 🔖
  101. /// </summary>
  102. /// <param name="input"></param>
  103. /// <returns></returns>
  104. [ApiDescriptionSettings(Name = "BatchEnable"), HttpPost]
  105. [DisplayName("批量启用/禁用存储提供者")]
  106. public async Task BatchEnableProvider(BatchEnableProviderInput input)
  107. {
  108. foreach (var id in input.Ids)
  109. {
  110. var provider = await _fileProviderService.GetFileProviderById(id);
  111. if (provider != null)
  112. {
  113. var updateInput = new UpdateFileProviderInput
  114. {
  115. Id = id,
  116. Provider = provider.Provider,
  117. BucketName = provider.BucketName,
  118. IsEnable = input.IsEnable
  119. };
  120. await _fileProviderService.UpdateFileProvider(updateInput);
  121. }
  122. }
  123. }
  124. /// <summary>
  125. /// 获取存储提供者统计信息 🔖
  126. /// </summary>
  127. /// <returns></returns>
  128. [DisplayName("获取存储提供者统计信息")]
  129. public async Task<object> GetProviderStatistics()
  130. {
  131. var providers = await _fileProviderService.GetCachedFileProviders();
  132. var statistics = new
  133. {
  134. Total = providers.Count,
  135. Enabled = providers.Count(p => p.IsEnable == true),
  136. Disabled = providers.Count(p => p.IsEnable != true),
  137. ByProvider = providers.GroupBy(p => p.Provider)
  138. .Select(g => new { Provider = g.Key, Count = g.Count() })
  139. .ToList(),
  140. ByRegion = providers.Where(p => !string.IsNullOrEmpty(p.Region))
  141. .GroupBy(p => p.Region)
  142. .Select(g => new { Region = g.Key, Count = g.Count() })
  143. .ToList()
  144. };
  145. return statistics;
  146. }
  147. /// <summary>
  148. /// 获取所有可用的存储桶列表 🔖
  149. /// </summary>
  150. /// <returns></returns>
  151. [DisplayName("获取所有可用的存储桶列表")]
  152. public async Task<List<string>> GetAvailableBuckets()
  153. {
  154. return await _fileProviderService.GetAvailableBuckets();
  155. }
  156. /// <summary>
  157. /// 获取存储桶和提供者的映射关系 🔖
  158. /// </summary>
  159. /// <returns></returns>
  160. [DisplayName("获取存储桶和提供者的映射关系")]
  161. public async Task<Dictionary<string, List<SysFileProvider>>> GetBucketProviderMapping()
  162. {
  163. return await _fileProviderService.GetBucketProviderMapping();
  164. }
  165. }
  166. /// <summary>
  167. /// 批量启用/禁用存储提供者输入参数
  168. /// </summary>
  169. public class BatchEnableProviderInput
  170. {
  171. /// <summary>
  172. /// 存储提供者ID列表
  173. /// </summary>
  174. [Required]
  175. public List<long> Ids { get; set; }
  176. /// <summary>
  177. /// 是否启用
  178. /// </summary>
  179. public bool IsEnable { get; set; }
  180. }