You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#应用上传DICOM文件至本地Orthanc服务器失败求助

解决DICOM文件上传Orthanc失败的问题

首先,从你给出的错误日志能明确判断:你生成的dicomfile.dcm文件严重损坏且不完整(仅84字节),Orthanc依赖的DCMTK解析器完全无法识别这种无效文件。下面是针对性的排查和修复步骤:

1. 先揪出数据集的异常问题

你创建DicomFile时传入的dataset大概率本身就有问题:

  • 确认dataset是否正确填充了DICOM必需的核心元数据(比如患者ID、研究/序列/实例UID、SOP类UID等),缺失这些信息会导致保存的文件根本不具备合法DICOM文件的结构。
  • 重点排查错误日志里提到的自定义标签(2d2d,6664):它被错误设置了一个离谱的超大数据长度(1647393075字节),但实际文件剩余的字节数只有76字节,这明显是代码逻辑错误(比如把指针地址当成了数据长度,或者类型转换时出了问题)。

2. 验证DICOM文件的保存结果

别默认Save()方法一定成功,很多DICOM库的保存操作会返回状态码或抛出异常,你需要主动检查:

OFCondition saveStatus = dicomfile->Save("dicomfile.dcm");
if (!saveStatus.good()) {
    std::cerr << "保存DICOM文件失败: " << saveStatus.text() << std::endl;
    // 这里要终止后续上传流程,避免传无效文件
    return;
}

保存完成后,手动去文件系统看一眼dicomfile.dcm的大小:如果还是只有几十字节,说明dataset根本没写入有效数据,得回溯数据集的构建过程。

3. 检查上传前的文件读取逻辑

你代码里的String dcm = F...部分被截断了,这里应该是你读取文件内容准备上传的环节:

  • 确保文件完全保存完成后再执行读取操作,比如可以在Save()成功后,用文件系统API确认文件存在且大小合理(正常DICOM文件至少几百字节以上,除非是极简测试文件)。
  • 如果是读取时只读取了部分字节,也会导致上传的内容不完整,Orthanc自然解析失败。

4. 用工具验证生成的文件合法性

可以用DCMTK的dcmdump命令行工具直接检查生成的文件:

dcmdump dicomfile.dcm

如果这个工具也报错无法解析,说明问题100%出在文件生成环节;如果工具能正常输出元数据,再去排查Orthanc的上传接口调用是否有问题(比如HTTP请求头设置错误、上传方式不符合要求)。


内容的提问来源于stack exchange,提问作者ComputerGenius

火山引擎 最新活动