Отправка изображения в API с помощью Curl - PullRequest
0 голосов
/ 19 сентября 2018

Я был очень разочарован моей попыткой отправить изображение в API с помощью Curl.Изображение приходит из html формы со стороны клиента.Когда форма отправлена, я проверяю, чтобы убедиться, что файл является изображением, а изображение перемещено в папку для отправки следующим образом:

$location = "ImageUploads/";
if(isset($_FILES["Image"]["tmp_name"]))
 {
$checkImage = getimagesize($_FILES["Image"]["tmp_name"]);
if($checkImage !== false){
    $Image = $_FILES['Image']['tmp_name'];
    $ImageContent = addslashes(file_get_contents($Image));
    $ImagePosted =true;

    $ImageRealName = $_FILES['Image']['name'];
    if(move_uploaded_file($Image, $location.$ImageRealName))
    {
        echo 'File Uploaded';
    }
}
else{
echo 'Image not submitted';
}

После перемещения изображения в папку для загрузки я инициируюcurl Post как так:

$baseURL ="https://apithatIamusing.com/api/";
$curl =  curl_init($baseURL);
$myImage = new CURLFile($location.$_FILES['Image']['name'],$_FILES['Image']['type'],$_FILES['Image']['name']);

После этого я создаю массив curl_post_data для включения остальных требований к данным API:

$curl_post_data = array(
                            'public_key' => $publicKey,
                            'private_key' => $privateKey,
                            'order_type' => 'Image',
                            'origin_id' => '11111111',
                            'name' => $FirstName,
                            'surname' => $LastName,
                            'photo' => $myImage);

Затем я устанавливаю все Curtopts, которые ябудет использовать:

curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_UPLOAD, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);

Затем я выполняю и пытаюсь декодировать ответ json:

$imageResult= curl_exec($curl);
                        if($imageResult ===false)
                        {
                            $info = curl_getinfo($curl);
                                        curl_close($curl);
                                        die('error occured during curl exec. Additioanl info: ' . var_export($info));
                        }
                        $imageJson = json_decode($imageResult, true);

                        curl_close($curl);

                        $imageSuccess = $imageJson["success"];
                        $imageMessage = $imageJson["message"];
                        $imageSuccess = $imageJson["result"];

                        echo '<p>imageSuccess:'.$imageSuccess.' </p>';
                        echo '<p>imageMessage: '.$imageMessage.' </p>';
                        echo '<p>imageSuccess: '.$imageSuccess.' </p>';

Я считаю, что проблема может быть связана с $ myImage, создаваемым curl,Документация API требует, чтобы в 'photo' была указана следующая информация:

filename="t1.png"
Content-Type: image/png

Но, насколько я понимаю, curlfile включает в себя имя, тип контента и название сообщения.Будем весьма благодарны за любые рекомендации или другие способы сделать этот api post вызов с использованием php.

...