Как остановить загрузку PHP cURL, вставив «Границу» в поле «Тип контента»? - PullRequest
0 голосов
/ 04 апреля 2020

Я использую приведенный ниже код для загрузки файла MP4 в веб-сервис, используя PHP cURL.

Я указал 'Content-Type' как 'video / mp4' в CURLOPT_HTTPHEADER.

К сожалению, после загрузки файла «Content-Type», сохраненный для него в сервисе, отображается как: «content_type»: «video / mp4; border = ---- WebKitFormBoundaryfjNZ5VkJS8z3CB9X»

Как вы можете видеть, 'border' был вставлен в 'content_type'.

Когда я затем загружаю файл, он не воспроизводится с сообщением «файл не поддерживается / расширение файла неверно / файл поврежден».

$authorization = "Authorization: Bearer [token]"; 

$args['file'] = curl_file_create('C:\example\example.mp4','video/mp4','example');

$url='[example web service URL]';

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data', 'Accept: application/vnd.mendeley-content-ticket.1+json', $authorization)); 
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $args);

$response = curl_exec($ch); // URL encoded output - needs to be URL encoded to get the HREF link header
curl_close($ch);

Буду очень признателен за любую помощь, совет или указатели!

1 Ответ

1 голос
/ 04 апреля 2020

Может быть, API не ожидает составную часть POST, но фактическое содержимое в самом теле:

Ссылка: Как поместить большое количество данных в пределах PHP скручивание без дополнительной памяти ?

Вам необходимо использовать метод PUT для фактического содержимого файла до go внутри тела - если вы используете POST, он попытается отправить как форму.

$authorization = "Authorization: Bearer [token]"; 
$file = 'C:\example\example.mp4';
$infile = fopen($file, 'r');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            "https://api.mendeley.com/file_contents");
curl_setopt($ch, CURLOPT_PUT,            1 ); // needed for file upload
curl_setopt($ch, CURLOPT_INFILESIZE,     filesize($file));
curl_setopt($ch, CURLOPT_INFILE,         $infile);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,  'POST' );
curl_setopt($ch, CURLOPT_POST,           1);
curl_setopt($ch, CURLOPT_HTTPHEADER,     array('Content-Type: video/mp4', 'Accept: application/vnd.mendeley-content-ticket.1+json', $authorization)); 

curl_setopt($ch, CURLOPT_HEADER,         0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result=curl_exec ($ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...