2015-12-25 20 views
8

Sono abbastanza nuovo in PHP CURL e stavo cercando di chiamare un'API per fare il caricamento delle immagini (più file alla volta). La documentazione API ha fornito l'esempio seguente in CURL. Ho provato e funziona.Image upload CURL in 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 

Ora ho bisogno di convertirlo in PHP Curl. Per qualche motivo, ricevo sempre il parametro errore "imageData" non valido. Codice Qualcuno può aiutare

$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

chi darai taglie –

+0

Grazie per taglie . È possibile effettuare l'upvoting se si desidera che –

risposta

4

cercare di dare il percorso completo dell'immagine, invece di '@/path/to/images/milk.jpg';

qui rappresentati sono:

$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); 

Per favore fatemi sapere se questo non funziona.

+0

non abbia funzionato con il percorso completo. Comunque $ imgUrl è l'URL dell'API in modo che il tuo codice aggiungendolo al nome del file immagine non abbia senso? In ogni caso sono stato in grado di risolverlo solo ora usando php curl file create – user1263019

0

Come caricare un file utilizzando 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>