使用orthanc库上传Dicom文件夹

时间:2019-07-06 11:24:26

标签: javascript php dicom

我想上传文件DICOM并使用orthanc库对所有dcm文件进行索引。 我写这段代码:

php:
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $url="http://localhost:8042/instances";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt($ch, CURLOPT_POST,1 );
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: 
text/plain'));
    foreach ($_FILES['files']['tmp_name'] as $i => $name) {
        curl_setopt($ch, 
CURLOPT_POSTFIELDS,file_get_contents($name));
        $result=curl_exec($ch);
        print_r($result);   
    }
}

html:
<form method="post" enctype="multipart/form-data" action="#">
    <input type="file" name="files[]" id="files" multiple="" directory="" 
     webkitdirectory="" mozdirectory="">
    <input class="button" type="submit" value="Upload" />
</form>

此代码需要很长的时间,因此请务必仔细。 有什么问题? 我想要方法上传dcm文件目录,并使用API​​ orthanc并使用php,js对其索引进行索引。

谢谢..

2 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是使用任何DICOM兼容客户端的强大的store scu功能。最受欢迎的是dcmtk。

 storescu -aec ORTHANC localhost 4242 *.dcm

您可以找到dcmtk软件包on this link的安装说明以及storecu on this link的文档

命令故障

storescu

是dcmtk软件包的store scu函数的名称。

-aec ORTHANC

指定服务器的AE标题,它应与orthanc中配置的aet匹配,默认为ORTHANC。根据Orthanc的版本和配置,甚至可能不需要指定-aec参数。但是无论如何,文档都建议这样做。

指定服务器的地址。如果它在同一台计算机上运行,​​则可能是本地主机。

4242

4242是Orthanc服务器用于DICOM连接的默认端口。如果您通过orthanc配置或其他端口重定向机制(如docker的)更改了此设置,则应指定为

*。dcm

星号表示所有与该模式匹配的文件都应上传。 storescu将在执行该文件的文件夹中查找文件。如果您在这里遇到麻烦,只需指定完整路径,例如/orthanc/ct/*.dcm或C:\ orthanc \ ct * .dcm

以编程方式运行

如果您需要上传特定于文件的文件以测试或查看CT,则可能不需要通过编程语言来运行它,则可以从Shell手动运行它。 如果您确实需要以编程方式运行该脚本,而不会使用.sh或.bat脚本,则可以从您选择的编程语言中执行此命令

在php中将是这样的:

$ success_or_error = shell_exec(“ storescu -aec ORTHANC localhost 4242 * .dcm”)

或者在Python中

导入子过程 subprocess.run([[“ storescu”,“ -aec”,“ ORTHANC”,“ localhost”,“ 4242”,“ * .dcm”])

替代品

我不推荐这些替代方案,但出于完整性考虑,我不得不列出它们。

如果您正在寻找开放源代码但性能较差的替代方法,则可以尝试gdcm的gdcmstore(安装说明here,可通过gdcmscu --help和man gdcmscu获得文档)

Orthanc提供的功能还可以通过其Orhtanc特定的API(主要是出于历史原因,我相信)或符合DICOM的DICOMweb api上传文件。为此,需要使用任何http客户端,例如curl或python的请求。如果您希望从Web浏览器上载文件,那么从js http客户端获取dicomweb解决方案可能是最好的主意。

答案 1 :(得分:0)

我认为您必须以以下方式填写POST:

$cFile = curl_file_create($file_name_with_full_path);
$post = array('file_contents'=> $cFile);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

类似这样的事情。因此,请首先使用curl_file_create,然后将其放入POST,然后将其放入发布字段。