#php #api
#php #API
Вопрос:
Я использую базовый PHP curl для отправки данных в вызов API iNaturalist, но я получаю внутреннюю ошибку сервера.
Мой HTML-код:
<!DOCTYPE html>
<html>
<body>
<form action="imageuploaddir.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
и мой imageuploaddir.php код — это
<?php
$authorization = "Authorization: Bearer ###somekey;
$file=$_FILES["fileToUpload"];
$postfields = array('file' =>'@'.$file,'observation_photo[observation_id]'=> 4230809);
var_dump($postfields);
$ch =curl_init();
curl_setopt($ch,CURLOPT_URL,"http://www.inaturalist.org/observation_photos");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch, CURLOPT_VERBOSE,1);
curl_setopt($ch, CURLOPT_POST,TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postfields);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: multipart/form-data",
$authorization
));
$response = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>
$postfields = array('file' =>'@'.$file,'observation_photo[observation_id]'=> 4230809);
Когда я отправляю сообщение в этом формате, я получаю сообщение об ошибке:
Обратите внимание: преобразование массива в строку
Ответ №1:
Я изменил массив postfields и установил для CURLOPT_SAFE_UPLOAD значение false, чтобы успешно опубликовать изображение и другой атрибут в API.
$postfields = array(
'file' =>
'@' . $_FILES['fileToUpload']['tmp_name']
. ';filename=' . $_FILES['fileToUpload']['name']
. ';type=' . $_FILES['fileToUpload']['type']
,'observation_photo[observation_id]'=>4230809);
Я также установил для CURLOPT_SAFE_UPLOAD значение false curl_setopt($ch,CURLOPT_SAFE_UPLOAD,false);