diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index 0dd43aa93..f82c22725 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -912,7 +912,7 @@ public class OSSService : IOSSService } /// - /// 删除某个目录的文件 + /// 删除某个目录的文件 (包含单个文件,oss单个文件需要去除前缀/) /// /// /// diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index ca52fee6d..0a2ffbadc 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -75,8 +75,8 @@ namespace IRaCIS.Core.Application.Service { public static int IntValue = 100; - - public async Task DealIVUSOCTDicomTag(string subjectCode, bool isUploadOss) + [AllowAnonymous] + public async Task DealIVUSOCTDicomTag(string subjectCode, bool? isUploadOss) { var trialId = Guid.Parse("01000000-AC13-0242-3AE4-08DC9B0495C6"); @@ -85,39 +85,47 @@ namespace IRaCIS.Core.Application.Service //var subjectCodeList = new List() { "04032", "12004", "04005" }; var list = await _dicomInstanceRepository.Where(t => t.TrialId == trialId && t.DicomStudy.SubjectVisit.IsBaseLine) - .Where(t => t.DicomStudy.Subject.Code== subjectCode) + .Where(t => t.DicomStudy.Subject.Code == subjectCode) .WhereIf(subjectCode == "04032", t => t.DicomStudy.ModalityForEdit == "OCT") .WhereIf(subjectCode == "12004", t => t.DicomStudy.ModalityForEdit == "IVUS") - .WhereIf(subjectCode == "04005 ", t => t.DicomStudy.ModalityForEdit == "IVUS" || t.DicomStudy.ModalityForEdit == "OCT") + .WhereIf(subjectCode == "04004", t => t.DicomStudy.ModalityForEdit == "IVUS" || t.DicomStudy.ModalityForEdit == "OCT") + .WhereIf(subjectCode == "04005", t => t.DicomStudy.ModalityForEdit == "IVUS" || t.DicomStudy.ModalityForEdit == "OCT") .Select(t => new { SubjectCode = t.DicomStudy.Subject.Code, t.DicomStudy.ModalityForEdit, - t.Path + t.Path, + t.FileSize }).ToListAsync(); foreach (var item in list) { + Console.WriteLine(item.Path); - var stream = await _IOSSService.GetStreamFromOSSAsync(item.Path); + await using var stream = await _IOSSService.GetStreamFromOSSAsync(item.Path); - var dicomFile = DicomFile.Open(stream); + var dicomFile = DicomFile.Open(stream, FileReadOption.ReadLargeOnDemand); switch (item.SubjectCode) { case "04032": - dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}_04032"); + dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-04032"); dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04032"); break; case "12004": - dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}_12004"); + dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-12004"); dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "12004"); break; + case "04004": + dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-04004"); + dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04004"); + break; + case "04005": - dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}_04005"); + dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, $"{trialCode}-04005"); dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, "04005"); break; @@ -131,28 +139,53 @@ namespace IRaCIS.Core.Application.Service var fileName = Path.GetFileName(item.Path); - // 4 保存到一个 MemoryStream - await using var output = new MemoryStream(); - dicomFile.Save(output); - output.Position = 0; - if (isUploadOss == false) + //if (isUploadOss == false) + //{ + // // 本地完整路径 + // var localPath = Path.Combine(Directory.GetCurrentDirectory(), fileName); + + // // 写入文件 + // await using var fileStream = File.Create(localPath); + // await output.CopyToAsync(fileStream); + + // // 可选:确保写入完成再关闭 + // await fileStream.FlushAsync(); + //} + //else + if (isUploadOss == true) { - // 本地完整路径 - var localPath = Path.Combine(Directory.GetCurrentDirectory(), fileName); + //4 保存到一个 MemoryStream + await using var output = new MemoryStream(); + dicomFile.Save(output); + output.Position = 0; - // 写入文件 - await using var fileStream = File.Create(localPath); - await output.CopyToAsync(fileStream); - // 可选:确保写入完成再关闭 - await fileStream.FlushAsync(); - } - else - { await _IOSSService.UploadToOSSAsync(output, folder, fileName, false); + //var pipe = new System.IO.Pipelines.Pipe(); + + //// 写入端:fo-dicom + //_ = Task.Run(async () => + //{ + // try + // { + // await using var writer = pipe.Writer.AsStream(); + // dicomFile.Save(writer); // 直接写 Pipe + // await pipe.Writer.CompleteAsync(); + // } + // catch (Exception ex) + // { + // await pipe.Writer.CompleteAsync(ex); + // } + //}); + + ////await _IOSSService.UploadToOSSAsync(pipe.Reader.AsStream(), folder, fileName, false); + + await _IOSSService.DeleteFromPrefix(item.Path.TrimStart("/"), true); + + } }