This documentation is for XNAT versions 1.6.0 - 1.6.5. You can find the latest documentation for XNAT 1.7 at https://xnat.org/documentation

Skip to end of metadata
Go to start of metadata

If I have a dataset I would like to upload into XNAT, and I've properly organized the data on the file system, then uploading the data is very easy.

For our hypothetical situation, I'm uploading a collection of data, each including a T1 and T2 raw DICOM data as well as NIFTI reconstrutions of that data. I have it organized by project/subject/session.

/data/
/data/subject1/
/data/subject1/session1/
/data/subject1/session1/RAW/
/data/subject1/session1/RAW/SCAN1/1232132.dcm
/data/subject1/session1/RAW/SCAN2/1232133.dcm
/data/subject1/session1/RECON/T1_0343/0343.nfti
/data/subject1/session1/RECON/T1_0344/0344.nfti

I can build a simple script which will translate this directory into a set of REST commands.

//if you configure the .xnatPass file in your home directory, you can skip the inclusion of the host, username, & password
setenv rest_params "-host http://central.xnat.org -u USERNAME -p PASSWORD "

//create subject1
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1"

//create session1
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1?xnat:mrSessionData/date=01/02/07"

//create SCAN1
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/scans/SCAN1?xsiType=xnat:mrScanData&xnat:mrScanData/type=T1"

 
//upload SCAN1 files...
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/scans/SCAN1/resources/DICOM/resources/DICOM?format=DICOM&content=T1_RAW"
 
//upload SCAN1 files...
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/scans/SCAN1/resources/DICOM/files/1232132.dcm" -local /data/subject1/session1/RAW/SCAN1/1232132.dcm

//create SCAN2
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/scans/SCAN2?xsiType=xnat:mrScanData&xnat:mrScanData/type=T2"

 
//create resource collection to put files into
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/scans/SCAN2/resources/DICOM?format=DICOM&content=T2_RAW"
 
//upload SCAN2 files...
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/scans/SCAN2/resources/DICOM/files/1232133.dcm" -local /data/subject1/session1/RAW/SCAN2/1232133.dcm


//create reconstruction 1
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/reconstructions/session1_recon_0343?xnat:reconstructedImageData/type=T1_RECON"

//create resource collection to put files into
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/reconstructions/session1_recon_0343/resources/NIFTI?format=NIFTI"
 
//upload reconstruction 1 files...
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/reconstructions/session1_recon_0343/resources/NIFTI/files/0343.nfti" -local /data/subject1/session1/RECON/T1_0343/0343.nfti


//create reconstruction 2
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/reconstructions/session1_recon_0344?xnat:reconstructedImageData/type=T2_RECON"

 
//create resource collection to put files into
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/reconstructions/session1_recon_0344/resources/NIFTI?format=NIFTI"
 
//upload reconstruction 2 files...
XNATRestClient $rest_params -m PUT -remote "/data/archive/projects/YOURTEST/subjects/subject1/experiments/session1/reconstructions/session1_recon_0344/resources/NIFTI/files/0344.nfti" -local /data/subject1/session1/RECON/T1_0344/0344.nfti

When uploading images, it is good form to define the format of the images (DICOM, ANALYZE, etc) and the content type of the data.

Related: REST Uploading Files Tips