繁体   English   中英

通过PHP SDK为AWS S3创建CORS规则

[英]Creating CORS rules for AWS S3 via PHP SDK

这已经让我发疯了好几天,而且我知道我缺少一些简单的东西。 我一直在尝试为使用PHP SDK动态创建的存储桶更新CORS。

这是我在发现的各种教程中试图共同攻克的内容:(我不确定的一件事是发送多个AllowedMethods的首选方法)。

    $result = $s3Client->putBucketCors(array(
        'Bucket' => $bucket,
        'CORSConfiguration' => array(
        array(
            'AllowedOrigins' => array('AllowedOrigin' => '*'),
            'AllowedMethods' => array('AllowedMethods' => 'POST'),
            'AllowedMethods' => array('AllowedMethods' => 'GET'),
            'AllowedMethods' => array('AllowedMethods' => 'PUT'),
        'MaxAgeSeconds' => array('MaxAgeSeconds' => '3000'),
        'AllowedHeader' => array('AllowedHeader' => '*')
        )
    )
));

上面的返回以下错误:

致命错误:在验证为PutBucketCors操作提供的输入时,未捕获的异常'InvalidArgumentException'和消息'发现1错误:[CORSConfiguration]必须是一个关联数组。

我尝试使用此页面上的信息来提供帮助,但我知道它已经过时了: http : //docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.S3 .S3Client.html#_putBucketCors

我已经通过AWS控制台验证了存储桶是否存在并已创建。 任何帮助将不胜感激。 谢谢!

编辑:我能够将我的CORS从现有存储桶中取出,这就是它给我的。 仍在尝试弄清楚如何设置要创建的数组:

 data:Aws\Result:private] => Array ( 

[CORSRules] => Array ( [0] =>


 Array ( [AllowedHeaders] => Array ( [0] => * )

 [AllowedMethods] => Array ( [0] => GET [1] => POST [2] => PUT )
 [AllowedOrigins] => Array ( [0] => * )[
 MaxAgeSeconds] => 3000 ))
    <?php
    $result = $s3Client->putBucketCors(array(
        'Bucket' => $bucket,
        'CORSRules' => array(
        array(
            'AllowedOrigins' => array('*'),
            'AllowedMethods' => array('POST', 'GET', 'PUT'),
            'MaxAgeSeconds' => 3000,
            'AllowedHeaders' => array('*')
        )
    )
));

它可能有效,请您尝试一下吗? 您有多个AllowedMethods,没有任何意义,最后一个只是覆盖了前两个。

同样在文档中,您共享了它说CORSRules但是来自响应的CORSConfigurations此文档说http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html

好的,所以经过大量的反复试验,我最终弄清楚了这一点。 我继续将CORSRules设置为单独的数组,只是为了使代码更具可读性。 这是我想出的内容,以防万一有人跟我下船:

    $cors = array(array(
        'AllowedOrigins' => array('*'),
        'AllowedMethods' => array('POST', 'GET', 'PUT'),
        'MaxAgeSeconds' => 3000,
        'AllowedHeaders' => array('*')
    ));

   $result = $s3Client->putBucketCors(array(
        'Bucket' => $bucket,
        'CORSConfiguration' => array('CORSRules' => $cors)
    ));

从Feyyaz( http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html )共享的文档中读取,CORSConfiguration充当容器,而CORSRules是其中的关联密钥。

我希望这对任何发现自己与我所在的船相同的人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM