适用于AWS S3的语法php-sdk“putObjectAcl”

问题描述 投票:0回答:1

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

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

但是,无论我如何尝试遵循PHP sdk [有限]文档中的示例,我似乎无法使用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',消息'错误执行“PutObjectAcl”on“https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl”; AWS HTTP错误:客户端错误:PUT https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl导致第191行上的/project/vendor/aws/aws-sdk-php/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格式不正确或未对我们发布的XML进行验证schema - MalformedACLError您提供的XML格式不正确或未针对我们发布的架构进行验证B24661919936C2DADft / ****************************** ***************** =在第191行的/project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php中

php amazon-web-services amazon-s3 php-7.1
1个回答
0
投票

我设法删除了guzzle html messageTrait withHeader()函数,所以我可以在php流中观看传出的xml。然后我将结果与我在谷歌搜索中的各个地方找到的xml的例子进行了比较,并通过比较的反复试验,我将问题追溯到组授权中的'DisplayName'=>'所有用户'。删除该行,它似乎工作。

$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"
        ]
    ]
];

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

© www.soinside.com 2019 - 2024. All rights reserved.