簡體   English   中英

AWS S3 php-sdk“ putObjectAcl”的正確語法

[英]Proper syntax for AWS S3 php-sdk “putObjectAcl”

我的任務是弄清楚AWS PHP sdk的工作原理,因此我們可以使用它來托管Web服務器的客戶圖像數據。 我已經能夠成功測試創建,管理數據以及將數據加載到存儲桶中的大多數功能,但是當我嘗試查看內容時,“訪問被拒絕”。

進入管理控制台,我想出了如何設置權限,以便可以使用特定主機規則或通過將存儲桶和對象設置為世界可讀性來查看文件。

但是,無論我如何嘗試遵循PHP sdk [limited]文檔中的示例,我似乎都無法使用Amazon提供的php代碼設置ACL值。

他們的示例只是在各個值的位置列出,而我嘗試為其中的存儲桶,對象和帳戶填寫相關數據,但這是行不通的。 我嘗試做一個getObjectAcl並發送回類似於收到的內容,但它不起作用。 我嘗試在線查看示例,但發現的內容卻無效。

這是我嘗試過的最新示例:

$params = [
    'ACL' => 'public-read',
    'AccessControlPolicy' => [
        'Grants' => [
            [
                'Grantee' => [
                    'DisplayName' => 'Owner',
                    'ID' => $awsId,
                    'Type' => "CanonicalUser"
                ],
                'Permission' => "FULL_CONTROL"
            ],
            [
                'Grantee' => [
                    'DisplayName' => 'All Users',
                    'URI' => "http://acs.amazonaws.com/groups/global/AllUsers",
                    'Type' => "Group"
                ],
                'Permission' => "READ"
            ],
        ],
        'Owner' => [
            'ID' => $awsId
        ]
    ],
    'Bucket' => "our-test-bucket",
    'Key' => "800x600.jpg"
];

$result = $awsSdk->getS3Client()->putObjectAcl($params);

結果輸出:

致命錯誤:未捕獲的異常“ Aws \\ S3 \\ Exception \\ S3Exception”,消息為“在https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg上執行“ PutObjectAcl”時出現錯誤? acl “; AWS HTTP錯誤:客戶端錯誤: PUT https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl導致/ project / vendor / aws / aws-sdk-php /第191行的src / WrappedHttpHandler.php

Aws \\ S3 \\ Exception \\ S3Exception:在“ https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl “上執行“ PutObjectAcl”時出錯; AWS HTTP錯誤:客戶端錯誤: PUT https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl導致400 Bad Request響應: MalformedACLError您提供的XML不是-f(已截斷...)MalformedACLError(客戶端):您提供的XML格式不正確或未針對我們發布的架構進行驗證-MalformedACLError您提供的XML MalformedACLError不正確或未針對我們發布的架構進行驗證B24661919936C2DADft / *************************************************** =在第191行的/project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php

我設法將跟蹤信息放到了html的messageTrait withHeader()函數中,以便可以查看php流中的傳出xml。 然后,我將結果與在google搜索的各個位置找到的xml的示例進行了比較,並通過反復試驗進行比較,將問題歸結為Group Grant中的'DisplayName'=>'All Users' 刪除該行,它似乎起作用。

$pubAcl = [
    'Owner' => [
        'ID' => $awsId,
        'DisplayName' => 'Owner'
    ],
    'Grants' => [
        [
            'Grantee' => [
                'ID' => $awsId,
                'DisplayName' => 'Owner',
                'Type' => "CanonicalUser"
            ],
            'Permission' => "FULL_CONTROL"
        ],
        [
            'Grantee' => [
                'URI' => "http://acs.amazonaws.com/groups/global/AllUsers",
                'Type' => "Group"
            ],
            'Permission' => "READ"
        ]
    ]
];

(訂單更改是測試的結果,但並非是問題所在)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM