Following the same line of work as the last blog post, I’ll explain a possible way of uploading a set of Dicom images separated in folders indicating subject/session organization into XNAT. This solution is based on a script by Hauke Bartsch (hbartsch@ucsd.edu).
Bash script:
# Create a session cookie, we want to re-use that session instead of providing
# login information every time. Number of sessions might be limited otherwise to 1000.
cookie=`curl -k -u $USER:$PASSWORD -X POST $XNAT/data/JSESSION` echo "Session ID is: $cookie"
# create subject in case it does not exist
echo "create subject $c" c=`curl --cookie JSESSIONID=$cookie -k -X PUT $XNAT/data/archive/projects/$PROJECT/subjects/$subject`
# create session in case it does not exist
echo "create session $c" c=`curl --cookie JSESSIONID=$cookie -k -X PUT $XNAT/data/archive/projects/$PROJECT/subjects/$subject/experiments/$session?xsiType=xnat:mrSessionData`
timestamps=( ) for file in `find $directory -type f -print` do
```
# move file over using REST API
c=`curl --cookie JSESSIONID=$cookie -s -k -H 'Content-Type: application/dicom' -X POST "$XNAT/data/services/import?inbody=true&PROJECT_ID=$PROJECT&SUBJECT_ID=$subject&EXPT_LABEL=$session&prearchive=true&overwrite=append&format=DICOM&content=T1_RAW" --data-binary @$file | tr -d [:cntrl:]`
echo -n "."
timestamp=`echo $c | cut -d'/' -f6`
# is timestamp new?
found="0"
for f in "${timestamps[@]}"; do
if [ "$f" = "$timestamp" ]; then
found="1"
fi
done
# add to array
if [ $found = "0" ]; then
timestamps+=($timestamp)
echo "found a new series $timestamp"
fi
```
done echo "done sending files..."