Я пытаюсь отправить файл в тонкий API через curl PHP.
На самом деле у меня есть PHP-файл, который получает данные из почты, и я предполагаю вызвать тонкий API с полученными данными, и тонкий API собирается сохранить данные в базе данных. Это прекрасно работает, когда в данных нет файла, но когда я отправляю файл в API вместе с другими данными с помощью PHP curl и устанавливаю 'content-type: multipart / form-data', я пропускаю все опубликованные данные на стороне API. Я не мог понять, что с ним не так !!!
Кстати, это хорошо работает, когда я тестирую API с почтальоном. API успешно получает файл и сохраняет его в хранилище. Проблема должна быть на стороне клиента, где я вызываю API, используя curl и PHP.
Может кто-нибудь помочь мне, как настроить вызов curl, чтобы заставить API работать?
Большое спасибо
route.php
$app->post('/softwareskills/insert', SoftwareSkillsController::class . ':insert')->setName('SoftwareSkills.insert');
SoftwareSkillsController.php
class SoftwareSkillsController {
public function insert(Request $request, Response $response, array $args)
{
$params= $request->getParsedBody();
$file = $request->getUploadedFiles();
var_dump($params); // return empty array!
var_dump($file); // return empty array!
}
}
upload.php
<?php
// $_POST and $_FILES to send them via php CURL
$tmpfile = $_FILES['attachment']['tmp_name'];
$filename = basename($_FILES['attachment']['name']);
$filemime = $_FILES['attachment']['type'];
$data = array(
"StNo" => $_POST['StNo'],
"SoftwareName" => $_POST['SoftwareName'],
"proficiency" => $_POST['proficiency'],
"attachment" => new CURLFile($tmpfile,$filemime,$filename)
);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://myapi.com/softwareskills/insert",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_HTTPHEADER => array(
"content-type: multipart/form-data"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}