为Eventbrite争取s3多部分上传guzzle

时间:2017-12-05 01:55:24

标签: php amazon-s3 multipart guzzle eventbrite

我正在尝试根据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'

0 个答案:

没有答案