PHP cURL загружает медиа на Eventbrite

Я пытаюсь загрузить логотип для события через Eventbrite API v3, используя cURL в php 5.6.

Используемый код является портом Python

$MYTOKEN = "...";
$baseurl = "https://www.eventbriteapi.com/v3";
$endpoint = "media/upload";
$querystring    =   http_build_query(array("token"=>$MYTOKEN,"type"=>"image-event-logo"));
$url = $baseurl.'/'.$endpoint.'/?'.$querystring;
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER         => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING       => "",
CURLOPT_USERAGENT      => "spider",
CURLOPT_AUTOREFERER    => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT        => 120,
CURLOPT_MAXREDIRS      => 10,
CURLOPT_SSL_VERIFYPEER => false
);

$ch             = curl_init( $url );
curl_setopt_array( $ch, $options);
$content        = curl_exec( $ch );
curl_close( $ch );
$response = json_decode($content);

Ответ содержит теперь:

object(stdClass)[274]
public 'upload_method' => string 'POST' (length=4)
public 'upload_token' => string '...=' (length=112)
public 'upload_url' => string 'https://s3.amazonaws.com/eventbrite-uploader-incoming-prod/' (length=59)
public 'upload_data' =>
object(stdClass)[273]
public 'AWSAccessKeyId' => string '...' (length=20)
public 'bucket' => string 'eventbrite-uploader-incoming-prod' (length=33)
public 'acl' => string 'private' (length=7)
public 'key' => string '...' (length=32)
public 'signature' => string '...=' (length=28)
public 'policy' => string '...==' (length=224)
public 'file_parameter_name' => string 'file' (length=4)

Используя эти данные, я пытаюсь выполнить загрузку, используя multipart / form-data:

$filename = 'somefile';
$file = file_get_contents($filename);
$url = $response->upload_url;
$postdata = (array)$response->upload_data;
$postdata["file"] = $file;
$postdata["upload_token"] = $response->upload_token;
$multipart = array();
foreach ($postdata as $key => $value) {
$multipart[] = array('name' => $key,'contents' => $value);
}
$options[CURLOPT_POST] =  true;
$options[CURLOPT_SAFE_UPLOAD] = true;
$options[CURLOPT_POSTFIELDS] = $postdata;
$options[CURLOPT_HTTPHEADER] = array("Content-Type:multipart/form-data");
$ch      = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
curl_close( $ch );

// notify upload completeness to Eventbrite

$endpoint = "media/upload";
$content =          $this->curlpost($endpoint,array("upload_token"=>$response->upload_token));
$response = json_decode($content);

// the logoid for the event object itself
$logoid = $response->id;

Я получаю следующую ошибку:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InvalidArgument</Code>
<Message>POST requires exactly one file upload per request.</Message>
<ArgumentName>file</ArgumentName>
<ArgumentValue>0</ArgumentValue>
<RequestId>...</RequestId>
<HostId>...</HostId>
</Error>

Чего-то еще не хватает?

РЕДАКТИРОВАТЬ: Благодаря предложению @hanshenrik, код выше был исправлен.

1

Решение

Задача ещё не решена.

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

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

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