簡體   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