Загрузка нескольких изображений с помощью PHP Curl

Я пытаюсь загрузить более одного изображения с PHP Curl. API, который я использую, дает мне следующий пример:

curl -v -s -u username:password 
 -H "Content-Type: multipart/form-data" 
 -H "Accept: application/vnd.com.example.api+json" 
 -F "image=@img1.jpeg;type=image/jpeg" 
 -F "image=@img2.jpeg;type=image/jpeg" 
 -XPUT 'https://example.com/api/sellers/12/ads/217221/images'

поэтому в моем PHP-скрипте я попробовал это:

$files = array();

foreach($photos as $photo) {
    $cfile = new CURLFile('../' . $photo, 'image/jpeg', 'test_name');
    $files[] = $cfile;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://services.example.com/seller-api/sellers/' . $seller . '/ads/' . $voertuig_id . '/images');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $files);
curl_setopt($ch, CURLOPT_PROXY,'api.test.sandbox.example.com:8080');
curl_setopt($ch, CURLOPT_USERPWD, 'USER:PASS');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Host: services.example.com',
    'Content-type: multipart/form-data; boundary=vjrLefDejJaWiU0JzZfsadfasd1rMcE2HQ-n7XsSx',
    'Accept: application/vnd.com.example.api+json'
));

$output = curl_exec($ch);

curl_close($ch);

сначала я получил этот ответ от API:

 {
   "errors":{
      "error":{
         "@key":"unsupported-form-element"
      }
   }
}

но теперь нет никакого ответа вообще. Как использовать curl для загрузки нескольких файлов?

если $files является пустым JSON, например, он не дает никакой ошибки вообще и возвращает изображения (конечно, пустые).

этот документация по API я использую: https://services.mobile.de/manual/new-seller-api.html#_upload_images

изменить: Я попытался создать тело запроса и отправить его, но он ничего не делает:

$requestBody = '';
$requestBody .= '--vjrLeiXjJaWiU0JzZkUPO1rMcE2HQ-n7XsSxrn';
$requestBody .= 'Content-Disposition: form-data; name="image"; filename="ferrari.JPG"rn';
$requestBody .= 'Content-Type: image/jpegrn';
$requestBody .= 'Content-Transfer-Encoding: binaryrn';

curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);

1 ответов


попробуйте использовать assoc array, как его использовать в документации CURLFile

$photos = [
    'img1' => 'img1.jpg',
    'img2' => 'img2.jpg'
]

$files = [];

foreach($photos as $key => $photo) {
    $cfile = new CURLFile('../' . $photo, 'image/jpeg', $key);
    $files[$key] = $cfile;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://services.example.com/seller-api/sellers/' . $seller . '/ads/' . $voertuig_id . '/images');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $files);
curl_setopt($ch, CURLOPT_PROXY,'api.test.sandbox.example.com:8080');
curl_setopt($ch, CURLOPT_USERPWD, 'USER:PASS');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Host: services.example.com',
    'Content-type: multipart/form-data; boundary=vjrLefDejJaWiU0JzZfsadfasd1rMcE2HQ-n7XsSx',
    'Accept: application/vnd.com.example.api+json'
));

$output = curl_exec($ch);

curl_close($ch);