Se você precisar fazer upload de um arquivo para um serviço usando cURL, basta anexar um símbolo de arroba (@) a uma string contendo o caminho do arquivo.
Por exemplo:
//Initialise the cURL var
$ch = curl_init();
//Get the response from cURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//Set the Url
curl_setopt($ch, CURLOPT_URL, 'http://www.example.org/');
//Create a POST array with the file in it
$postData = array(
'testData' => '@/path/to/file.txt',
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// Execute the request
$response = curl_exec($ch);
Isso enviará o conteúdo de /path/to/file.txt até example.org.
A parte importante do código acima é
$postData = array(
'testData' => '@/path/to/file.txt',
);