如何使用transfer manager在AWS-SDK-PHP v3.2上将ACL设置为公共读取

如何使用transfer manager在AWS-SDK-PHP v3.2上将ACL设置为公共读取,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,好的,我的第一个问题,好一点 我很难找到这个问题的答案。是的,我试过了 传输构造函数的选项没有提到任何ACL选项。 我在谷歌上的搜索结果要么是空白,要么是2.x版 这是我的密码 $options[] = [ 'DEBUG' => true, ]; // Where the files will be transferred to $dest = 's3://newbucket/'.$UUID; // Create a transfer object. $manager = new \Aws

好的,我的第一个问题,好一点

我很难找到这个问题的答案。是的,我试过了 传输构造函数的选项没有提到任何ACL选项。 我在谷歌上的搜索结果要么是空白,要么是2.x版 这是我的密码

$options[] = [
'DEBUG' => true,
];
// Where the files will be transferred to
$dest = 's3://newbucket/'.$UUID;
// Create a transfer object.
$manager = new \Aws\S3\Transfer($s3, $path, $dest, $options );
// Perform the transfer synchronously.
$manager->transfer();
$promise = $manager->promise();
$promise->then(function () {
    echo 'Done!';
});
一切上传正常,但文件不是公共读取
在何处/如何对3.2版中上载的文件设置公共读取一种方法是在控制台中设置Bucket的权限。在要设置的bucket的权限下。单击“编辑存储桶策略”

您需要的另一个信息是如何创建粘贴的JSON文件。如果您从AWS的工具中得到错误,只需根据您在中看到的内容重新格式化它


我希望这对其他人有所帮助

您可以在传递给传输管理器的选项数组中添加一个
'before'
闭包,该选项可以处理权限分配。尝试用以下代码替换manager实例化代码:

$manager = new \Aws\S3\Transfer($s3, $path, $dest, [
    'before' => function (\Aws\CommandInterface $command) {
        if (in_array($command->getName(), ['PutObject', 'CreateMultipartUpload'])) {
            $command['ACL'] = 'public-read';
        }
    },
]);

完美的谢谢,这正是我想要的:)我在哪里可以阅读更多关于函数之前的内容。我只想公开扩展名为.ts的文件。