diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index c8c63a73a..53bf6338a 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -145,6 +145,8 @@ public interface IOSSService public Task DeleteFromPrefix(string prefix); + List GetRootFolderNames(); + public ObjectStoreDTO GetObjectStoreTempToken(); } @@ -526,6 +528,55 @@ public class OSSService : IOSSService } + /// + /// 获取所有根目录名称 + /// + /// + public List GetRootFolderNames() + { + GetObjectStoreTempToken(); + var aliConfig = ObjectStoreServiceOptions.AliyunOSS; + var _ossClient = new OssClient(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? aliConfig.EndPoint : aliConfig.InternalEndpoint, + AliyunOSSTempToken.AccessKeyId, + AliyunOSSTempToken.AccessKeySecret, + AliyunOSSTempToken.SecurityToken); + + List rootFolders = new List(); + string nextMarker = null; + + try + { + ObjectListing objectListing = null; + do + { + // 列出根目录下的对象和文件夹 + objectListing = _ossClient.ListObjects(new Aliyun.OSS.ListObjectsRequest(aliConfig.BucketName) + { + + MaxKeys = 1000, + Marker = nextMarker, + Delimiter = "/" // 使用分隔符来模拟文件夹 + }); + + // 遍历 CommonPrefixes 获取根文件夹名称 + foreach (var prefix in objectListing.CommonPrefixes) + { + rootFolders.Add(prefix.TrimEnd('/')); // 去掉末尾的斜杠 + } + + // 设置 NextMarker 以获取下一页的数据 + nextMarker = objectListing.NextMarker; + + } while (objectListing.IsTruncated); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + + return rootFolders; + } + /// /// 删除某个目录的文件 /// diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index d72802c4c..689f44716 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -12977,6 +12977,12 @@ + + + 删除脏文件夹 + + + 真删除项目 方便清理测试数据 临床试验项目Id @@ -13324,6 +13330,12 @@ + + + 获取所有根目录名称 + + + 删除某个目录的文件 diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index 3c1357226..ee56b27a9 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -1,7 +1,9 @@ -using IRaCIS.Application.Contracts; +using DocumentFormat.OpenXml.Office2010.ExcelAc; +using IRaCIS.Application.Contracts; using IRaCIS.Application.Interfaces; using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Helper; +using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using Microsoft.AspNetCore.Authorization; @@ -431,6 +433,23 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.Ok(); } + /// + /// 删除OSS脏文件夹 + /// + /// + public async Task DeleteOSSFolder() + { + List trialids = await _trialRepository.Select(x => x.Id).ToListAsync(); + List path= _oSSService.GetRootFolderNames(); + foreach (var item in path) + { + if (Guid.TryParse(item, out Guid folderId) && !trialids.Contains(folderId)) + { + await _oSSService.DeleteFromPrefix(item); + } + } + } + /// 真删除项目 方便清理测试数据 /// 临床试验项目Id [AllowAnonymous]