Как загрузить изображение в iNaturalist с помощью php cURL? - PullRequest
0 голосов
/ 14 декабря 2018

Работали над публикацией фотографий наблюдений в iNaturalist с помощью iNaturalist POST / survey_photos api с использованием php cURL, но я не могу этого сделать.Провел некоторое исследование и обнаружил это на github, я попробовал код, но получил ошибку 'status': 422.

Мой код:

<?php
require './init.php';

if ( isset($_POST['submitfile']) )
{
    // Make sure there are no upload errors
    if ($_FILES['upfile']['error'] > 0)
    {
        die("Error uploading file...");
    }
    $token = $_SESSION['access_token'];
    $file_path = 'c:\Users\hp\Pictures\New folder';

    $suffix = 'image/jpeg';

    $photo_name = $_FILES['upfile']['name'];

    $inat_id = 'White Magnolia';

    $boundary = rand(10,100);
    $body = '';
    $body .= '--' . $boundary . "\r\n";
    $body .= 'Content-Disposition: form-data; name="upfile"; filename=' . basename($file_path) . "\"\r\n";
    $body .= 'Content-Type: ' . $suffix . "\r\n\r\n";
    $body .=file_get_contents($photo_name) . "\r\n";
    $body .= '--' . $boundary . "\r\n";
    $body .= 'Content-Disposition: form-data; name="observation_photo[observation_id]"' . "\r\n";
    $body .= 'Content-Type: application/json' . "\r\n\r\n";
    $body .= json_encode(['observation_id' => $inat_id]) . "\r\n";
    $body .= '--' . $boundary . '--' . "\r\n";

    $photo_payload = array('observation_photos'=>array(
        'method'=>'POST',
        'timeout'=>'10',
        'headers'=> array(
            'Authorization'=>'Bearer'.$token,
            'Content-Type'=>'multipart/form-data;'
        ),
        'body' => $body
    ));
    $payload = json_encode($photo_payload);

    print_r($payload);

    echo "<hr><br>";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.inaturalist.org/v1/observation_photos?access_token=".$token);
    //curl_setopt($ch, CURLOPT_URL, "https://api.inaturalist.org/v1/observations?access_token=".$token);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    $result = curl_exec($ch);
    curl_close($ch);

    // Print the result?
    print_r($result);
}
?>
 <hr>
 <br>
<form action="" method="post" enctype="multipart/form-data">
    Select file to upload:
    <input type="file" name="upfile">
    <input type="submit" value="Upload File" name="submitfile">
</form>

Ошибка, которую яполучить при загрузке изображения:

enter image description here

1 Ответ

0 голосов
/ 14 декабря 2018

Я обнаружил 1 или 2 проблемы.

  1. $file_path = realpath('white magnolia.jpg'); Разве это не путь к файлу (местоположение), а не фактическое имя файла?
  2. Возможно ли эточто ваш $photo_name('white magnolia.jpg') нуждается в подчеркивании вместо пробела?$photo_name('white_magnolia.jpg')

Я почти уверен, что пункт 1 выше - ваша главная проблема, но я подумал, что могу указать, что вам может понадобиться подчеркивание на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...