PHP: проблема при разработке запроса CURL для загрузки файла в API

У меня возникла эта проблема в последние несколько дней, чтобы разработать запрос CURL в php для публикации данных файла в API.

Вот запрос CURL

$ curl --request POST \
--url 'UPLOAD_URL' \
--upload-file 'PATH_TO_FILE' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'

для PATH_TO_FILE я попробовал каждый метод, опубликованный через Интернет и в стеке потока.

вот мой код PHP

<?php
header('Content-Type: application/json');
$sheader = array('Authorization: Bearer '.$_SESSION['access_token']);
$filename = $_FILES['upload-file']['name'];
$filedata = $_FILES['upload-file']['tmp_name'];
$filesize = $_FILES['upload-file']['size'];
$filetype = $_FILES['upload-file']['type'];

if($filename != '')
{
$ch = curl_init();
$cFile = new CURLFile(realpath($filename), $filetype, 'harish.jpg');
//$cFile = '@'. realpath($filename);
$data = array('upload-file' => $cFile);
curl_setopt($ch, CURLOPT_POSTFIELDS, $cFile);
//curl_setopt($ch, CURLOPT_POSTFIELDS, realpath($filename));
curl_setopt($ch, CURLOPT_URL, $_POST['upload_url']);
curl_setopt($ch, CURLOPT_HTTPHEADER, $sheader);
curl_exec($ch);
echo json_encode($ch);
//echo json_encode(array('filename'=>$filename, 'temp_path'=>$filedata, 'basepath'=>realpath($filename)));

} else {
echo 'There is no file selected';
}

В основном решение, которое я нашел в Интернете, это два упомянутых ниже

Способ 1 (для php < 5,5)

'@'.$filepath

Способ 2 (для php> 5.5)

CURLFile($filename, $filetype, 'somefile.jpg');

или же

curl_file_create($filedata, 'image/jpeg', $filename);

Ничто из вышеперечисленного не помогло мне. Я использовал realpath ($ filename) тоже внутри CURLFile, чтобы получить абсолютный путь к файлу, но, к сожалению, это тоже не сработало.

1

Решение

Я признаю что CURLFile документация немного двусмысленно, но первый аргумент конструктора, $name, на самом деле это физический путь к файлу, который вы хотите отправить, а не «понятное» имя (которое указывается в необязательном третьем аргументе, $postname). Вы должны заметить, что что-то не так, поскольку вы никогда не говорите Керлу о $_FILES['upload-file']['tmp_name']— у него нет возможности узнать, какой файл вы хотите отправить.

Так:

$filename = $_FILES['upload-file']['name'];
$filedata = $_FILES['upload-file']['tmp_name'];
$filesize = $_FILES['upload-file']['size'];
$filetype = $_FILES['upload-file']['type'];

$cFile = new CURLFile($filedata, $filetype, 'harish.jpg')

Вы не получаете уведомления об этом, потому что пропускаете проверку ошибок. Вы не проверяете возвращаемое значение любой функции и не вызываете curl_error () в любом месте вашего кода.

Еще одна ошибка у вас в том, что вы передаете CURLFile например, так:

curl_setopt($ch, CURLOPT_POSTFIELDS, $cFile);

Правильный синтаксис должен быть таким:

curl_setopt($ch, CURLOPT_POSTFIELDS, ['give_a_nice_post_name_here' => $cFile]);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]