下载大小和影像数量返回
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
bd9d1a6298
commit
efd24ab9ba
|
|
@ -943,6 +943,9 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
var progress = new
|
||||
{
|
||||
TotalCount= totalCount,
|
||||
TotalSize= totalSize,
|
||||
|
||||
CountPercent = totalCount > 0
|
||||
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
||||
: "0",
|
||||
|
|
@ -1002,52 +1005,64 @@ namespace IRaCIS.Core.API.Controllers
|
|||
{
|
||||
foreach (var instance in series.InstanceList)
|
||||
{
|
||||
//当前完成大小
|
||||
receivedSize = receivedSize + instance.FileSize ?? 0;
|
||||
receivedCount++;
|
||||
|
||||
abortToken.ThrowIfCancellationRequested();
|
||||
|
||||
var entryPath =
|
||||
$"{patient.PatientIdStr}/{studyTime}_{modalitysStr}/IMAGE/{instance.FileName}";
|
||||
|
||||
var entry = zip.CreateEntry(entryPath, CompressionLevel.Fastest);
|
||||
|
||||
await using var entryStream = entry.Open();
|
||||
await using var source = await _oSSService.GetStreamFromOSSAsync(instance.Path);
|
||||
|
||||
#region 将多帧合并为一帧
|
||||
|
||||
// 如果你是从 stream 打开
|
||||
var dicomFile = await DicomFile.OpenAsync(source);
|
||||
|
||||
// 获取 Pixel Data 标签
|
||||
var pixelData = DicomPixelData.Create(dicomFile.Dataset);
|
||||
//获取像素是否为封装形式
|
||||
var syntax = dicomFile.Dataset.InternalTransferSyntax;
|
||||
|
||||
//对于封装像素的文件做转换
|
||||
if (syntax.IsEncapsulated)
|
||||
try
|
||||
{
|
||||
// 创建一个新的片段序列
|
||||
var newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
||||
// 获取每帧数据并封装为单独的片段
|
||||
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
||||
//当前完成大小
|
||||
receivedSize = receivedSize + instance.FileSize ?? 0;
|
||||
receivedCount++;
|
||||
|
||||
abortToken.ThrowIfCancellationRequested();
|
||||
|
||||
var entryPath =
|
||||
$"{patient.PatientIdStr}/{studyTime}_{modalitysStr}/IMAGE/{instance.FileName}";
|
||||
|
||||
var entry = zip.CreateEntry(entryPath, CompressionLevel.Fastest);
|
||||
|
||||
await using var entryStream = entry.Open();
|
||||
await using var source = await _oSSService.GetStreamFromOSSAsync(instance.Path);
|
||||
|
||||
#region 将多帧合并为一帧
|
||||
|
||||
// 如果你是从 stream 打开
|
||||
var dicomFile = await DicomFile.OpenAsync(source);
|
||||
|
||||
// 获取 Pixel Data 标签
|
||||
var pixelData = DicomPixelData.Create(dicomFile.Dataset);
|
||||
//获取像素是否为封装形式
|
||||
var syntax = dicomFile.Dataset.InternalTransferSyntax;
|
||||
|
||||
//对于封装像素的文件做转换
|
||||
if (syntax.IsEncapsulated)
|
||||
{
|
||||
var frameData = pixelData.GetFrame(n);
|
||||
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
||||
// 创建一个新的片段序列
|
||||
var newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
||||
// 获取每帧数据并封装为单独的片段
|
||||
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
||||
{
|
||||
var frameData = pixelData.GetFrame(n);
|
||||
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
||||
}
|
||||
// 替换原有的片段序列
|
||||
dicomFile.Dataset.AddOrUpdate(newFragments);
|
||||
}
|
||||
// 替换原有的片段序列
|
||||
dicomFile.Dataset.AddOrUpdate(newFragments);
|
||||
|
||||
#endregion
|
||||
|
||||
await dicomFile.SaveAsync(entryStream);
|
||||
//await source.CopyToAsync(entryStream, 32 * 1024, abortToken);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Log.Logger.Warning($"处理文件{instance.Path}失败: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
await NotifyProgressAsync();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
await dicomFile.SaveAsync(entryStream);
|
||||
//await source.CopyToAsync(entryStream, 32 * 1024, abortToken);
|
||||
|
||||
|
||||
await NotifyProgressAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1133,6 +1148,9 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
var progress = new
|
||||
{
|
||||
TotalCount = totalCount,
|
||||
TotalSize = totalSize,
|
||||
|
||||
CountPercent = totalCount > 0
|
||||
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
||||
: "0",
|
||||
|
|
@ -1192,52 +1210,64 @@ namespace IRaCIS.Core.API.Controllers
|
|||
{
|
||||
foreach (var instance in series.InstanceList)
|
||||
{
|
||||
//当前完成大小
|
||||
receivedSize = receivedSize + instance.FileSize ?? 0;
|
||||
receivedCount++;
|
||||
|
||||
abortToken.ThrowIfCancellationRequested();
|
||||
|
||||
var entryPath =
|
||||
$"{visit.SubjectCode}_{visit.VisitName}/{studyTime}_{modalitysStr}/IMAGE/{instance.FileName}";
|
||||
|
||||
var entry = zip.CreateEntry(entryPath, CompressionLevel.Fastest);
|
||||
|
||||
await using var entryStream = entry.Open();
|
||||
await using var source = await _oSSService.GetStreamFromOSSAsync(instance.Path);
|
||||
|
||||
#region 将多帧合并为一帧
|
||||
|
||||
// 如果你是从 stream 打开
|
||||
var dicomFile = await DicomFile.OpenAsync(source);
|
||||
|
||||
// 获取 Pixel Data 标签
|
||||
var pixelData = DicomPixelData.Create(dicomFile.Dataset);
|
||||
//获取像素是否为封装形式
|
||||
var syntax = dicomFile.Dataset.InternalTransferSyntax;
|
||||
|
||||
//对于封装像素的文件做转换
|
||||
if (syntax.IsEncapsulated)
|
||||
try
|
||||
{
|
||||
// 创建一个新的片段序列
|
||||
var newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
||||
// 获取每帧数据并封装为单独的片段
|
||||
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
||||
//当前完成大小
|
||||
receivedSize = receivedSize + instance.FileSize ?? 0;
|
||||
receivedCount++;
|
||||
|
||||
abortToken.ThrowIfCancellationRequested();
|
||||
|
||||
var entryPath =
|
||||
$"{visit.SubjectCode}_{visit.VisitName}/{studyTime}_{modalitysStr}/IMAGE/{instance.FileName}";
|
||||
|
||||
var entry = zip.CreateEntry(entryPath, CompressionLevel.Fastest);
|
||||
|
||||
await using var entryStream = entry.Open();
|
||||
await using var source = await _oSSService.GetStreamFromOSSAsync(instance.Path);
|
||||
|
||||
#region 将多帧合并为一帧
|
||||
|
||||
// 如果你是从 stream 打开
|
||||
var dicomFile = await DicomFile.OpenAsync(source);
|
||||
|
||||
// 获取 Pixel Data 标签
|
||||
var pixelData = DicomPixelData.Create(dicomFile.Dataset);
|
||||
//获取像素是否为封装形式
|
||||
var syntax = dicomFile.Dataset.InternalTransferSyntax;
|
||||
|
||||
//对于封装像素的文件做转换
|
||||
if (syntax.IsEncapsulated)
|
||||
{
|
||||
var frameData = pixelData.GetFrame(n);
|
||||
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
||||
// 创建一个新的片段序列
|
||||
var newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
||||
// 获取每帧数据并封装为单独的片段
|
||||
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
||||
{
|
||||
var frameData = pixelData.GetFrame(n);
|
||||
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
||||
}
|
||||
// 替换原有的片段序列
|
||||
dicomFile.Dataset.AddOrUpdate(newFragments);
|
||||
}
|
||||
// 替换原有的片段序列
|
||||
dicomFile.Dataset.AddOrUpdate(newFragments);
|
||||
|
||||
#endregion
|
||||
|
||||
await dicomFile.SaveAsync(entryStream);
|
||||
//await source.CopyToAsync(entryStream, 32 * 1024, abortToken);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Log.Logger.Warning($"处理文件{instance.Path}失败: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
await NotifyProgressAsync();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
await dicomFile.SaveAsync(entryStream);
|
||||
//await source.CopyToAsync(entryStream, 32 * 1024, abortToken);
|
||||
|
||||
|
||||
await NotifyProgressAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1313,6 +1343,8 @@ ClinicalDataDownloadDTO inCommand)
|
|||
|
||||
var progress = new
|
||||
{
|
||||
TotalCount = totalCount,
|
||||
|
||||
CountPercent = totalCount > 0
|
||||
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
||||
: "0",
|
||||
|
|
@ -1349,7 +1381,7 @@ ClinicalDataDownloadDTO inCommand)
|
|||
//当前完成大小
|
||||
receivedCount++;
|
||||
|
||||
var entryPath =$"{data.FileName}";
|
||||
var entryPath = $"{data.FileName}";
|
||||
|
||||
var entry = zip.CreateEntry(entryPath, CompressionLevel.Fastest);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue