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 :)