Я пытаюсь загрузить на s3 на основе документации в Eventbrite, но я не получаю. Я думаю, что это связано со структурой моего запроса, но я пробовал несколько разных вещей, и ничего на самом деле не работает, и я получаю ‘Bucket POST должен содержать поле с именем’ key ‘error.
Инструкции здесь, так что он предоставляет вам предопределенный объект POST, но я не могу понять, как затем предоставить эти детали в Guzzle
https://www.eventbrite.com/developer/v3/resources/uploads/
Я бы использовал s3client, но я не думаю, что он подходит, так как у меня нет названия региона.
Так что это массив обратно из EB, как указано в документации
$postFields = [
'key' => $post_args['key'],
'AWSAccessKeyId' => $post_args['AWSAccessKeyId'],
'bucket' => $post_args['bucket'],
'acl' => $post_args['acl'],
'signature' => $post_args['signature'],
'policy' => $post_args['policy'],
];
и я пробовал различные структуры:
$args = [
'query' => $postFields,
'multipart' => [
[
'name' => $instructions_response['body']['file_parameter_name'],
'Content-type' => 'multipart/form-data',
'contents' => $image,
]
],
]
Или же
$args = [
'multipart' => [
[
'key' => $post_args['key'],
'AWSAccessKeyId' => $post_args['AWSAccessKeyId'],
'bucket' => $post_args['bucket'],
'acl' => $post_args['acl'],
'signature' => $post_args['signature'],
'policy' => $post_args['policy'],
'name' => $instructions_response['body']['file_parameter_name'],
'Content-type' => 'multipart/form-data',
'contents' => $image,
]
],
];
Или же
$args = [
'key' => $post_args['key'],
'AWSAccessKeyId' => $post_args['AWSAccessKeyId'],
'bucket' => $post_args['bucket'],
'acl' => $post_args['acl'],
'signature' => $post_args['signature'],
'policy' => $post_args['policy'],
'multipart' => [
[
'name' => $instructions_response['body']['file_parameter_name'],
'Content-type' => 'multipart/form-data',
'contents' => $image,
]
],
];
(Плюс куча более поддельных, которые я больше не могу вспомнить)
Во всяком случае, я застрял. Я просто не могу представить, как эти POST-данные должны быть структурированы для публикации на S3. Я спустился в кроличью нору с помощью Xdebug, и до сих пор не ясно, что происходит, когда он делает запрос.
Запрос называется так
$upload_response = $this->client->request('POST', $upload_url, $args);
ОБНОВЛЕНИЕ: мне было указано, что, хотя «ключ» в сообщении об ошибке указан строчными буквами, а то, что возвращается из aws, в документации прописывается заглавными буквами. Я изменил его на «Ключ», и теперь я получаю «Конфликтующие параметры строки запроса: acl, policy»
Задача ещё не решена.
Других решений пока нет …