2015-12-25 4 views
8

Я довольно новичок в PHP CURL и пытался вызвать API для загрузки изображений (по несколько файлов одновременно). Документация API дала приведенный ниже пример в CURL. Я тестировал и работает.Загрузка изображения CURL-команда в PHP Curl

curl -H "Authorization: Bearer 123456789" -i -X POST -F "whitespace=1" \ 
-F "imageData[][email protected]/path/to/images/milk.jpg" \ 
-F "imageData[][email protected]/path/to/images/peas.jpg" \ 
https://mytestapi.com/1.0/uploadimages 

Теперь мне нужно преобразовать его в PHP Curl. По какой-то причине, я всегда получаю ошибку «imageData» param недействительным. Может кто-то пожалуйста, помогите

$token = '123456789'; 
$imgUrl = 'https://mytestapi.com/1.0/uploadimages'; 


$data_to_post = array(); 
$data_to_post['whitespace'] = '1'; 
$data_to_post['imageData[]'] = '@/path/to/images/milk.jpg'; 
$data_to_post['imageData[]'] = '@/path/to/images/peas.jpg'; 


$curl = curl_init($imgUrl); 
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer '.$token]); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_VERBOSE, 1); 
curl_setopt($curl,CURLOPT_POST, 1); 
curl_setopt($curl,CURLOPT_POSTFIELDS, $data_to_post); 
$data = json_decode(curl_exec($curl)); 
$responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
curl_close($curl); 

var_dump($data); 
+0

которого вы дадите Bounty –

+0

Спасибо за щедрость , Вы можете увеличить, если хотите, –

ответ

4

Пытаться дать полный путь к изображению вместо '@/path/to/images/milk.jpg';

Вот Обновленный код:

$token = '123456789'; 
$imgUrl = 'https://mytestapi.com/1.0/uploadimages'; 


$data_to_post = array(); 
$data_to_post['whitespace'] = '1'; 
$data_to_post['imageData'][] = "@".$imgUrl.'/path/to/images/milk.jpg'; 
$data_to_post['imageData'][] = "@".$imgUrl.'/path/to/images/peas.jpg'; 


$curl = curl_init($imgUrl); 
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer '.$token]); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_VERBOSE, 1); 
curl_setopt($curl,CURLOPT_POST, 1); 
curl_setopt($curl,CURLOPT_POSTFIELDS, $data_to_post); 
$data = json_decode(curl_exec($curl)); 
$responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
curl_close($curl); 

var_dump($data); 

Пожалуйста, дайте мне знать, если это не сработает.

+0

не работал с полным путем. В любом случае $ imgUrl - это URL-адрес API, поэтому ваш код, добавляющий это имя файла изображения, не имеет смысла? В любом случае, я смог исправить это сейчас, используя php curl file create – user1263019

0

Как загрузить файл с помощью PHP CURL

<?php 

// Helper function courtesy of https://github.com/guzzle/guzzle/blob/3a0787217e6c0246b457e637ddd33332efea1d2a/src/Guzzle/Http/Message/PostFile.php#L90 
function getCurlValue($filename, $contentType, $postname) 
{ 
    // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax 
    // See: https://wiki.php.net/rfc/curl-file-upload 
    if (function_exists('curl_file_create')) { 
     return curl_file_create($filename, $contentType, $postname); 
    } 

    // Use the old style if using an older version of PHP 
    $value = "@{$this->filename};filename=" . $postname; 
    if ($contentType) { 
     $value .= ';type=' . $contentType; 
    } 

    return $value; 
} 

$filename = '/path/to/file.jpg'; 
$cfile = getCurlValue($filename,'image/jpeg','cattle-01.jpg'); 

//NOTE: The top level key in the array is important, as some apis will insist that it is 'file'. 
$data = array('file' => $cfile); 

$ch = curl_init(); 
$options = array(CURLOPT_URL => 'http://your/server/api/upload', 
      CURLOPT_RETURNTRANSFER => true, 
      CURLINFO_HEADER_OUT => true, //Request header 
      CURLOPT_HEADER => true, //Return header 
      CURLOPT_SSL_VERIFYPEER => false, //Don't veryify server certificate 
      CURLOPT_POST => true, 
      CURLOPT_POSTFIELDS => $data 
      ); 

curl_setopt_array($ch, $options); 
$result = curl_exec($ch); 
$header_info = curl_getinfo($ch,CURLINFO_HEADER_OUT); 
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
$header = substr($result, 0, $header_size); 
$body = substr($result, $header_size); 
curl_close($ch); 

?> 

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>File Upload results</title> 
</head> 
<body> 
    <p>Raw Result: <?=$result?> 
    <p>Header Sent: <?=$header_info?></p> 
    <p>Header Received: <?=$header?></p> 
    <p>Body: <?=$body?></p> 
</body> 
</html> 
Смежные вопросы