下载大小和影像数量返回
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
|
var progress = new
|
||||||
{
|
{
|
||||||
|
TotalCount= totalCount,
|
||||||
|
TotalSize= totalSize,
|
||||||
|
|
||||||
CountPercent = totalCount > 0
|
CountPercent = totalCount > 0
|
||||||
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
||||||
: "0",
|
: "0",
|
||||||
|
|
@ -1002,52 +1005,64 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
{
|
{
|
||||||
foreach (var instance in series.InstanceList)
|
foreach (var instance in series.InstanceList)
|
||||||
{
|
{
|
||||||
//当前完成大小
|
|
||||||
receivedSize = receivedSize + instance.FileSize ?? 0;
|
|
||||||
receivedCount++;
|
|
||||||
|
|
||||||
abortToken.ThrowIfCancellationRequested();
|
try
|
||||||
|
|
||||||
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 newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
receivedSize = receivedSize + instance.FileSize ?? 0;
|
||||||
// 获取每帧数据并封装为单独的片段
|
receivedCount++;
|
||||||
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
|
||||||
|
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
|
var progress = new
|
||||||
{
|
{
|
||||||
|
TotalCount = totalCount,
|
||||||
|
TotalSize = totalSize,
|
||||||
|
|
||||||
CountPercent = totalCount > 0
|
CountPercent = totalCount > 0
|
||||||
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
||||||
: "0",
|
: "0",
|
||||||
|
|
@ -1192,52 +1210,64 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
{
|
{
|
||||||
foreach (var instance in series.InstanceList)
|
foreach (var instance in series.InstanceList)
|
||||||
{
|
{
|
||||||
//当前完成大小
|
|
||||||
receivedSize = receivedSize + instance.FileSize ?? 0;
|
|
||||||
receivedCount++;
|
|
||||||
|
|
||||||
abortToken.ThrowIfCancellationRequested();
|
try
|
||||||
|
|
||||||
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 newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
receivedSize = receivedSize + instance.FileSize ?? 0;
|
||||||
// 获取每帧数据并封装为单独的片段
|
receivedCount++;
|
||||||
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
|
||||||
|
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
|
var progress = new
|
||||||
{
|
{
|
||||||
|
TotalCount = totalCount,
|
||||||
|
|
||||||
CountPercent = totalCount > 0
|
CountPercent = totalCount > 0
|
||||||
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
? Math.Round(receivedCount * 100m / totalCount, 2).ToString()
|
||||||
: "0",
|
: "0",
|
||||||
|
|
@ -1349,7 +1381,7 @@ ClinicalDataDownloadDTO inCommand)
|
||||||
//当前完成大小
|
//当前完成大小
|
||||||
receivedCount++;
|
receivedCount++;
|
||||||
|
|
||||||
var entryPath =$"{data.FileName}";
|
var entryPath = $"{data.FileName}";
|
||||||
|
|
||||||
var entry = zip.CreateEntry(entryPath, CompressionLevel.Fastest);
|
var entry = zip.CreateEntry(entryPath, CompressionLevel.Fastest);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue