为什么将 S3“子存储桶”导入 HealthImaging 失败并出现“没有文件与 S3 URI 匹配”错误?

问题描述 投票:0回答:1
在尝试以编程方式将 DICOM 对象的特定“子目录”从 S3 存储桶导入 HealthImaging 数据存储时,我收到“没有文件与提供的输入 S3 URI 匹配”错误。同时,我可以在 S3 控制台上直观地确认该特定存储桶中存在文件,包括完整的“子目录”前缀。好像文件在那里但找不到。

所需的步骤是:

  • 以编程方式将一个或多个 DICOM 文件上传到 S3 存储桶 (bucketname/level1prefix/level2prefix)。此步骤使用 TransferUtility 和 UploadAsync。

  • 上传完成后,调用 StartDICOMImportJobAsync 以从 S3 存储桶导入到现有 HealthImaging 数据存储。

当 InputS3Uri 如下所示时,对

StartDICOMImportJobAsync

 的调用工作正常:

s3://bucketname/level1prefix/


但是当InputS3Uri如下所示时它会失败:

s3://bucketname/level1prefix/level2prefix/


我希望它以第二种方式工作,因为我可能有多个使用相同

level1prefix

(例如入藏号或研究实例 UID)但在第二级具有唯一前缀的 S3 上传作业。 
level2prefix
 是唯一的作业 ID GUID。

为了排除故障,我在 AWS HealthImaging 控制台中尝试了相同的导入,并成功地将 DICOM 数据从

bucketname/level1prefix/level2prefix 导入到我的数据存储中。

我还尝试在 S3 上传步骤之后添加等待,然后再尝试导入,以防出现时间问题,但这没有什么区别。我还尝试了 ListObjects 调用来查看子存储桶中的内容(它声称它不存在),同时在 S3 控制台中直观地确认子存储桶(包含对象)确实存在。

由于它是在控制台而不是 API 调用上工作的,所以感觉可能是时间问题或前缀解析错误,其中 API 调用可能只获取第二个分隔符(正斜杠)之前的所有内容,否则无法读取我脑海。我对应该起作用的期望完全有可能是不正确的,但我在在线文档中找不到任何可以提供清晰说明的内容。

有没有办法以编程方式从 S3 子存储桶导入 HealthImaging 数据存储?任何有从 S3 导入 HealthImaging 的经验的人可以提供一丝见解吗?

问题已解决

(4/24/24) 发现此问题是由于内部开发的内部库中如何使用作业 GUID 将 DICOM 图像上传到 S3 以及开发脚本如何使用相同的结果造成的用于构造 S3 关键路径的 GUID。更多内容请参见下面的答案。

aws-sdk-net medical-imaging
1个回答
0
投票

内部 S3 DICOM 上传库正在执行此操作:

string keyPart = job.Guid.ToString("N");

当我从 S3 导入 HealthImaging 的开发脚本正在执行此操作时:

string keyPart = job.Guid.ToString();

当然,生成的 GUID 字符串版本是不同的,其中一个版本如下所示:

532cf00c03344615a5195f3b3fdab607

另一个版本看起来像这样:

532cf00c-0334-4615-a519-5f3b3fdab607

最终的解决方案归结为结对编程和一位同事,他说“向我展示完整的路径”,而他的大脑没有接受过看不出差异的训练。

© www.soinside.com 2019 - 2024. All rights reserved.