关于亚马逊网络服务:AWS S3 php-sdk” putObjectAcl”的正确语法

Proper syntax for AWS S3 php-sdk “putObjectAcl”

我的任务是弄清楚AWS PHP sdk的工作方式,因此我们可以使用它来托管Web服务器的客户图像数据。我已经能够成功测试创建,管理数据以及将数据加载到存储桶中的大多数功能,但是当我尝试查看内容时,会出现"访问被拒绝"的信息。

进入管理控制台,我弄清楚了如何设置权限,以便可以使用特定的主机规则或通过将存储桶和对象设置为世界可读性来查看文件。

但是,无论我如何尝试遵循PHP sdk [limited]文档中的示例,我似乎都无法使用Amazon提供的php代码设置ACL值。

他们的示例只是在各个值的位置列出,我尝试为其中的存储桶,对象和帐户填写相关数据,但这是行不通的。我尝试做一个getObjectAcl并发回类似于收到的内容,但它不起作用。我尝试在线查看示例,但发现的内容却不起作用。

这是我尝试过的最新示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$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);

结果输出:

Fatal error: Uncaught exception 'Aws\\S3\\Exception\\S3Exception' with
message 'Error executing"PutObjectAcl" on
"https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl";
AWS HTTP error: Client error: PUT
https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl

resulted in /project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php
on line 191

Aws\\S3\\Exception\\S3Exception: Error executing"PutObjectAcl" on"https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl";
AWS HTTP error: Client error: PUT
https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl

resulted in a 400 Bad Request response:

MalformedACLErrorThe XML you provided was not well-f (truncated...)
MalformedACLError (client): The XML you provided was not well-formed or did not validate against our published schema -
MalformedACLErrorThe XML you provided was not well-formed or did not validate against our published
schemaB24661919936C2DADft/***********************************************= in /project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php on line
191


我设法将跟踪放入html消息messageTrait withHeader()函数中,以便可以查看php流中的传出xml。然后,我将结果与在google搜索的各个位置找到的xml的示例进行了比较,并通过反复试验与比较,将问题归结为\\'DisplayName \\'=> \\'All Users \\'团体补助。删除该行,它似乎可以工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$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"
        ]
    ]
];

(订单更改是测试的结果,但未证明是问题所在)