Depending on the tool you are using to PUT files to the server, you may need to add an inbody=true query string parameter to force XNAT to treat the contents of your HTTP message as the actual file rather then as multi-part form data.

## XNAT REST Tools

The XNAT team has developed some simple java based tools which can be used as command prompt tools to access the REST API.

### XNATRestClient

The XNATRestClient is built specifically to facilitate user interaction with the REST API from the command prompt. Uploading files with this tool should be straightforward. You use the -local variable to identify the local file you are uploading. You use the -remote variable to identify the location you are PUTinig the file to.

XNATRestClient -host http://central.xnat.org -u USER -p PASS -m PUT -remote "/data/archive/projects/PATH/TO/DESTINATION/files" -local ./file.txt


### Curl

Most UNIX operating systems come pre-installed with 'Curl' which is a tool for transferring data to or from a server. Because XNAT Servers are secured, you will need to provide a username and password to access the api. If you use the -F tag, the file will be sent to the server as part of a multipart-form message (similar to a browser post).  Without the -F tag, curl would post the file as the body of the message and you would need to set the mime-type of your message for XNAT to process it correctly (or use the ?inbody=true parameter).  For convenience, the -F works effectively.

curl -u USERNAME:PASSWORD -X PUT "http://central.xnat.org/data/archive/projects/PATH TO DESTINATION" -F "filename.txt=@filename.txt"

The REST API supports the upload of compressed files that can be extracted on the server after successful upload. There are a few caveats:

• The files cannot cross hierarchical concepts. I.E. You cannot include files for both scans and reconstructions in the same zip file.
• The files cannot cross objects. I.E. You cannot include files for scan A and scan B. They must be within a single scan.
• The files cannot cross catalogs. Within each object you can have multiple catalogs (collections) of files. The files in a zip can only go in a single catalog.

To use compressed uploads, you would use a similar structure to uploading a normal file. Any where that you can upload files via the REST API, you can use the ?extract option.