From 2969306d1e331d114d532eed86a00f17f6157a0f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 3 Jun 2026 11:07:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=A4=9A=E5=B8=A7=E4=B8=8D?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E5=81=8F=E7=A7=BB=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/TrialImageDownloadService.cs | 29 +++++++++++++++---- .../Service/ImageAndDoc/StudyService.cs | 6 ++-- 2 files changed, 26 insertions(+), 9 deletions(-) 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); }