我正在尝试根据Eventbrite中的文档上传到s3,但我无处可去。我认为这取决于我的请求的结构,但我尝试了多种不同的东西,没有任何东西真正起作用,我得到一个'Bucket POST必须包含一个名为'key'的字段错误。
说明在这里,因此它为您提供了一个预先签名的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);
更新:有人向我指出,虽然'key'在错误消息中是小写的,并且从aws返回的内容,但它在文档中大写。我将其更改为“密钥”,现在我得到'冲突的查询字符串参数:acl,policy'