AWS S3 php sdk的正确语法;putObjectAcl";

AWS S3 php sdk的正确语法;putObjectAcl";,php,amazon-web-services,amazon-s3,php-7.1,Php,Amazon Web Services,Amazon S3,Php 7.1,我的任务是弄清楚AWS PHP sdk是如何工作的,这样我们就可以使用它为我们的web服务器托管客户图像数据。我已经能够成功地测试创建、管理和加载数据到bucket中的大部分功能,但是当我尝试查看内容时,我得到了“拒绝访问” 进入管理控制台,我了解了如何设置权限,以便使用特定的主机规则或通过将bucket和对象世界设置为可读来查看文件 然而,无论我如何尝试遵循PHPSDK[limited]文档中的示例,我似乎都无法使用Amazon提供的PHP代码设置ACL值 他们的示例只是列出了不同的值,我尝试

我的任务是弄清楚AWS PHP sdk是如何工作的,这样我们就可以使用它为我们的web服务器托管客户图像数据。我已经能够成功地测试创建、管理和加载数据到bucket中的大部分功能,但是当我尝试查看内容时,我得到了“拒绝访问”

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

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

他们的示例只是列出了不同的值,我尝试在这些值中填充我的bucket、object和account的相关数据,但没有效果。我试着做了一个
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”与 在上执行“PutObjectAcl”时出现消息“错误” ""; AWS HTTP错误:客户端错误:
PUT
https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl
结果是/project/vendor/aws/aws sdk php/src/WrappedHttpHandler.php 在线191

Aws\S3\Exception\S3Exception:在“”上执行“PutObjectAcl”时出错; AWS HTTP错误:客户端错误:
PUT
https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl
导致
400错误请求
响应: MalformedalError您提供的XML不是f格式的(截断的…) MalformedalError(客户端):您提供的XML格式不正确,或者没有根据我们发布的架构进行验证- MalformedalError您提供的XML格式不正确或未根据我们发布的 schemab24661919936c2daft/***********************************************=in/project/vendor/aws/aws sdk php/src/WrappedHttpHandler.php在线 191


我成功地在guzzle html messageTrait withHeader()函数中添加了一个跟踪,以便可以在php流中查看传出的xml。然后,我将结果与我在谷歌搜索中在不同地方找到的xml示例进行了比较,通过反复比较,我将问题追溯到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"
        ]
    ]
];

(订单更改是测试的结果,但不是问题)

您使用的是4天前下载的最新AWS PHP SDK吗