Разорбрался. Отправлять файлы на сервер при помощи PUT нужно как в коде ниже
$fo = fopen ($filename, 'r');
curl_setopt($this->_ch, CURLOPT_PUT, true);
curl_setopt($this->_ch, CURLOPT_INFILE, $fo);
curl_setopt($this->_ch, CURLOPT_INFILESIZE, filesize($filename));
Не правильно:
$post_data = ["file" => curl_file_create($file_name)];
curl_setopt($this->_ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $post_data);
В таком случае передается plain text, который будет обернут дополнительной информацией:
--------------------------5cff5c02b52f5c00
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: application/octet-stream
ВАШИ ДАННЫЕ
--------------------------5cff5c02b52f5c00--