diff --git a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs index eaad74bcb..6ba580e20 100644 --- a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs +++ b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs @@ -61,8 +61,24 @@ namespace IRaCIS.Core.Application.Service try { await using var source = await sourceFactory(); + + // 【关键修复】将 OSS 流缓冲到 MemoryStream + using var bufferedStream = new MemoryStream(); + + if (source.CanSeek) + { + source.Position = 0; + + } + else + { + // 完全复制到内存流 + await source.CopyToAsync(bufferedStream); + bufferedStream.Position = 0; // 重置位置 + } + // 如果你是从 stream 打开 - var dicomFile = await DicomFile.OpenAsync(source); + var dicomFile = await DicomFile.OpenAsync(source.CanSeek ? source : bufferedStream); //获取像素是否为封装形式 var syntax = dicomFile.Dataset.InternalTransferSyntax; @@ -70,11 +86,14 @@ namespace IRaCIS.Core.Application.Service //对于封装像素的文件做转换 if (syntax.IsEncapsulated) { + #region 开始方式 + // 获取 Pixel Data 标签 var pixelData = DicomPixelData.Create(dicomFile.Dataset); // 创建一个新的片段序列 var newFragments = new DicomOtherByteFragment(DicomTag.PixelData); + // 获取每帧数据并封装为单独的片段 for (int n = 0; n < pixelData.NumberOfFrames; n++) { @@ -82,13 +101,11 @@ namespace IRaCIS.Core.Application.Service newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data)); } - var frag = dicomFile.Dataset.GetDicomItem(DicomTag.PixelData); - - var originOffsetTable = frag?.OffsetTable; - - newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray()); // 替换原有的片段序列 dicomFile.Dataset.AddOrUpdate(newFragments); + + #endregion + } await dicomFile.SaveAsync(output); diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index c38ebff88..70458f08a 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -104,11 +104,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data)); } - var frag = dicomFile.Dataset.GetDicomItem(DicomTag.PixelData); + //var frag = dicomFile.Dataset.GetDicomItem(DicomTag.PixelData); - var originOffsetTable = frag?.OffsetTable; + //var originOffsetTable = frag?.OffsetTable; - newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray()); + //newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray()); // 替换原有的片段序列 dicomFile.Dataset.AddOrUpdate(newFragments); }