我想上传文件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对其索引进行索引。
谢谢..
答案 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,然后将其放入发布字段。