From f99cab6983b68b171d6edf8e1d129a689c511915 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 19 Mar 2025 17:16:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=20oss?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Helper/OSSService.cs | 84 ++++++++++++++++++-- 1 file changed, 79 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index 88d3c86e5..78944ddb7 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -156,7 +156,9 @@ public interface IOSSService public ObjectStoreDTO GetObjectStoreTempToken(); - public Task MoveObject(string sourcePath, string destPath, bool overwrite = true); + public Task MoveObject(string sourcePath, string destPath, bool overwrite = true); + + public long GetObjectSizeAsync(string sourcePath); } @@ -700,7 +702,7 @@ public class OSSService : IOSSService }; await amazonS3Client.DeleteObjectAsync(deleteRequest); - + } catch (AmazonS3Exception ex) { @@ -711,9 +713,9 @@ public class OSSService : IOSSService break; default: throw new BusinessValidationFailedException("ERROR"); - + } - + } /// @@ -998,6 +1000,78 @@ public class OSSService : IOSSService } } + public async Task GetObjectSizeAsync(string sourcePath) + { + GetObjectStoreTempToken(); + + var objectkey = sourcePath.Trim('/'); + + if (ObjectStoreServiceOptions.ObjectStoreUse == "AliyunOSS") + { + var aliConfig = ObjectStoreServiceOptions.AliyunOSS; + + var _ossClient = new OssClient(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? aliConfig.EndPoint : aliConfig.InternalEndpoint, AliyunOSSTempToken.AccessKeyId, AliyunOSSTempToken.AccessKeySecret, AliyunOSSTempToken.SecurityToken); + + var metadata = _ossClient.GetObjectMetadata(aliConfig.BucketName, objectkey); + + long fileSize = metadata.ContentLength; // 文件大小(字节) + + return fileSize; + } + else if (ObjectStoreServiceOptions.ObjectStoreUse == "MinIO") + { + var minIOConfig = ObjectStoreServiceOptions.MinIO; + + + var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.EndPoint}:{minIOConfig.Port}") + .WithCredentials(minIOConfig.AccessKeyId, minIOConfig.SecretAccessKey).WithSSL(minIOConfig.UseSSL) + .Build(); + + + var stat = await minioClient.StatObjectAsync(new Minio.DataModel.Args.StatObjectArgs() + .WithBucket(minIOConfig.BucketName) + .WithObject(objectkey)); + + return stat.Size; // 文件大小(字节) + } + else if (ObjectStoreServiceOptions.ObjectStoreUse == "AWS") + { + + var awsConfig = ObjectStoreServiceOptions.AWS; + + + // 提供awsAccessKeyId和awsSecretAccessKey构造凭证 + var credentials = new SessionAWSCredentials(AWSTempToken.AccessKeyId, AWSTempToken.SecretAccessKey, AWSTempToken.SessionToken); + + //提供awsEndPoint(域名)进行访问配置 + var clientConfig = new AmazonS3Config + { + RegionEndpoint = RegionEndpoint.USEast1, + UseHttp = true, + }; + + var request = new Amazon.S3.Model.GetObjectMetadataRequest + { + BucketName = awsConfig.BucketName, + Key = objectkey + }; + + var amazonS3Client = new AmazonS3Client(credentials, clientConfig); + + var response = await amazonS3Client.GetObjectMetadataAsync(request); + + long fileSize = response.ContentLength; // 文件大小(字节) + + return fileSize; + + } + else + { + throw new BusinessValidationFailedException("未定义的存储介质类型"); + } + } + + public ObjectStoreDTO GetObjectStoreTempToken() { @@ -1041,7 +1115,7 @@ public class OSSService : IOSSService BucketName = ossOptions.BucketName, EndPoint = ossOptions.EndPoint, ViewEndpoint = ossOptions.ViewEndpoint, - PreviewEndpoint=ossOptions.PreviewEndpoint + PreviewEndpoint = ossOptions.PreviewEndpoint }; From 805176c3eaa2ab3477001777927bc201c5ca5f7c Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 20 Mar 2025 09:35:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Helper/OSSService.cs | 2 +- IRaCIS.Core.Application/TestService.cs | 35 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index 78944ddb7..742442a4b 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -158,7 +158,7 @@ public interface IOSSService public Task MoveObject(string sourcePath, string destPath, bool overwrite = true); - public long GetObjectSizeAsync(string sourcePath); + public Task GetObjectSizeAsync(string sourcePath); } diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index 534d32aaf..f26f78bdc 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -205,6 +205,41 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.Ok(); } + /// + /// 非dicom 临床数据 + /// + /// + /// + /// + [AllowAnonymous] + public async Task DealTialFileSie([FromServices] IOSSService _oSSService, + [FromServices] IRepository _noneDicomStudyFileRepository, + [FromServices] IRepository _readingClinicalDataPDFRepository) + { + var noneDicomList = _noneDicomStudyFileRepository.Where(t => t.FileSize == 0 || t.FileSize == null).Select(t => new { t.Path, t.Id }).ToList(); + + foreach (var item in noneDicomList) + { + var fileSize = await _oSSService.GetObjectSizeAsync(item.Path); + + await _noneDicomStudyFileRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new NoneDicomStudyFile() { FileSize = fileSize }); + + } + + var clinicalDataPDFList = _readingClinicalDataPDFRepository.Where(t => t.Size == 0).Select(t => new { t.Path, t.Id }).ToList(); + + + foreach (var item in clinicalDataPDFList) + { + var fileSize = await _oSSService.GetObjectSizeAsync(item.Path); + + await _readingClinicalDataPDFRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new ReadingClinicalDataPDF() { Size = (int)fileSize }); + } + + + return ResponseOutput.Ok(); + } + [LowerCamelCaseJson]