【问题标题】:Proper syntax for AWS S3 php-sdk "putObjectAcl"AWS S3 php-sdk“putObjectAcl”的正确语法
【发布时间】:2019-03-04 17:17:43
【问题描述】:

我的任务是弄清楚 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”时出错 "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 导致 /project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php 在第 191 行

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 不是很好(截断...) MalformedACLError(客户端):您提供的 XML 格式不正确或未针对我们发布的架构进行验证 - MalformedACLError您提供的 XML 格式不正确或未验证我们发布的 架构B24661919936C2DADft/***********************************************=在 /project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php 上线 191

【问题讨论】:

  • 您是否使用了合理最新的 AWS PHP 开发工具包?
  • 4天前下载

标签: php amazon-web-services amazon-s3 php-7.1


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2016-11-07
    相关资源
    最近更新 更多