You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在fo-dicom的C-STORE SCP中读取远程AE发送的原始DICOM文件名?

解决fo-dicom C-STORE SCP获取原始文件名的问题

首先明确:DICOM C-STORE协议本身不传输原始文件名,它传输的是DICOM数据集内容,文件名属于发送端本地文件的属性,不会默认随C-STORE请求发送。你要获取原始文件名,只有两种可行路径:

  • 发送端主动将文件名嵌入到DICOM数据集的某个标签(标准标签或厂商私有标签)中
  • 若发送端使用DICOM文件系统相关协议(如C-GET),但你当前用的是C-STORE,此路径不适用

针对你的fo-dicom代码,调整方案如下:

1. 确认发送端是否嵌入了文件名

先和发送端的运维或开发确认:他们是否将原始文件名存入了某个DICOM标签?比如部分厂商会用私有标签,或复用一些非核心标准标签(仅为示例,需以实际为准)。

2. 在SCP中读取对应标签值

如果发送端确实嵌入了文件名,在OnCStoreRequestAsync方法中,从request.Dataset或request.File.FileMetaInfo中读取对应标签:

public async Task<DicomCStoreResponse> OnCStoreRequestAsync(DicomCStoreRequest request)
{
    string originalFileName = null;

    // 示例:替换为发送端实际存储文件名的标签
    var targetTag = new DicomTag(0x00XX, 0xXXXX); 
    if (request.Dataset.Contains(targetTag))
    {
        originalFileName = request.Dataset.GetString(targetTag);
    }
    // 若文件名存在于File Meta信息中,可从FileMetaInfo读取
    else if (request.File?.FileMetaInfo != null && request.File.FileMetaInfo.Contains(targetTag))
    {
        originalFileName = request.File.FileMetaInfo.GetString(targetTag);
    }

    // 后续逻辑:结合原始文件名和你原有的标签生成逻辑处理保存
    // 比如:var saveFileName = $"{originalFileName}_{request.Dataset.GetString(DicomTag.SOPInstanceUID)}.dcm";

    return new DicomCStoreResponse(DicomStatus.Success);
}

3. 若发送端未嵌入文件名

这种情况下你无法获取到原始文件名,只能继续使用现有逻辑(通过DICOM标签如SOP Instance UID生成文件名),或者联系发送端修改配置,将文件名嵌入到指定标签中。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:43:11