Upload files with CURL

CURL is a great tool for making requests to servers; especially, I feel it is great to use for testing APIs.

To upload files with CURL, many people make mistakes that thinking to use -X POST as regular form data; in facts, that way will cause errors.

The proper way to upload files with CURL is to use -F ( ? form) option, which will add enctype=?multipart/form-data? to the request.

$ curl -F ?data=@path/to/local/file? UPLOAD_ADDRESS

For example, if I want to upload a file at /home/petehouston/hello.txt to the server http://localhost/upload which processes file input with form parameter named img_avatar, I will make request like this,

$ curl -F ‘img_avatar=@/home/petehouston/hello.txt’ http://localhost/upload

Upload multiple files

To send upload request for multiple files, just add an additional -F option,

$ curl -F ‘fileX=@/path/to/fileX’ -F ‘fileY=@/path/to/fileY’ … http://localhost/upload

Upload an array of file

To send upload request for an array file, simply put additional -F options with same form parameter name as array,

$ curl -F ‘files=@/path/to/fileX’ -F ‘files=@/path/to/fileY’ … http://localhost/upload

Yay, that?s easy, have fun 🙂

28