@jenya92

Как отправить картинку POST в формате multipart/form-data?

Пытаюсь отправить картинку через API VK, получаю адрес сервера, отправляю запрос, вроди как всё работает, но в ответ возвращается пустое поле "photo". Как будто картинку не отправлял. Что я делаю не так?
function build_data_files($boundary, $files){
    $data = '';
    $eol = "\r\n";

    $delimiter = '-------------' . $boundary;

    foreach ($files as $name => $content) {
        $data .= "--" . $delimiter . $eol
              . 'Content-Disposition: form-data; name="' . $name . "\"".$eol.$eol.
              'Content-Type: image/png'.$eol
              . $content . $eol;
    }
    $data .= "--" . $delimiter . "--".$eol;

    return $data;
}

$VKimgLoadServer = json_decode(file_get_contents($VKimgLoad));
if(isset($VKimgLoadServer -> error))
    print_r($VKimgLoadServer);

else{
    $files = array(
        "photo" => file_get_contents("./img/post/2017-08/201708131447301997.png"),
    );

    $curl = curl_init();
    $boundary = uniqid();
    $delimiter = '-------------' . $boundary;
    $post_data = build_data_files($boundary, $files);
    
    curl_setopt_array($curl, array(
        CURLOPT_URL => $VKimgLoadServer -> response -> upload_url,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $post_data,
        CURLOPT_HTTPHEADER => array(
            "Content-Type: multipart/form-data; boundary=" . $delimiter,
            "Content-Length: " . strlen($post_data)
        )
    ));
  
    $response = curl_exec($curl);
    $info = curl_getinfo($curl);
    curl_close($curl);
    echo $response;

}
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Всё равно ведь используете curl для запроса. Попросите curl и сформировать корректное тело запроса.
https://www.php.net/manual/en/curlfile.construct.php
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
если хочешь без лишний мозгогребли, то просто укажи файлы ссылками, они же у тебя на http сервере..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы