Тут всё зависит от того, как именно вы отправляете файл, как http raw post data или как multipart/form-data
В первом (нехорошем) случае данные вашего файла будут доступны вызовом
$data = file_get_contents('php://input');
//И вы его можете сохранить
file_put_contents('path/to/catalog/on/server/file.bin', $data);
Во втором случае вы при отправке даёте какое-то имя полю формы (например 'my_file'), в котором содержатся данные файла и получаете его ещё проще:
В php есть "суперглобальный" массив $_FILES;
$fileData =( $_FILES['my_file'] ?? null);
if (!$fileData) {
echo 'No file!';
exit;
}
$success = move_uploaded_file($fileData['tmp_name'], 'path/to/catalog/on/server/file.bin');
var_dump($success); // -> true or false
Отправлять как multipart/form-data для сервера предпочтительнее, так как в этом случае apache сам сохраняет файл во временную директорию и уже потом запускает интерпретатор PHP (это для сервера немного проще, чем сразу запустить php скрипт и "кормить" его вводом в несколько мегабайт а то и гигабайт ). Если при загрузке файла произойдёт ошибка, она будет доступна в $fileData['error'] (int)
Подробнее см. в
https://www.php.net/manual/ru/reserved.variables.f...
Что касается Qt, тут далеко ходить за примером загрузки не надо
https://doc.qt.io/qt-5/qhttpmultipart.html