获取存储桶中所有对象的预签名网址amazon aws s3

时间:2015-08-28 10:11:34

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

我正在尝试获取存储桶中所有对象的预签名网址。我正在使用amazon php sdk 版本3

我试过的是

$client = new Aws\S3\S3Client([
    'version' => 'latest',
    'region' => 'us-west-2',
    'credentials.ini' => [
        'key' => $credentials['key'],
        'secret' => $credentials['secret'],
    ],
]);

$client->listObjects(['Bucket' => $bucketName]);

上面给我看了arrayAccess中的所有对象,但它有像

这样的对象url
 https://s3-us-west-2.amazonaws.com/some-demo/one2.txt

并且我不希望每个人都有权访问one2.txt,所以我创建了一个预先分配的网址

$cmd = $client->getCommand('GetObject', [
    'Bucket' => $bucket,
    'Key'    => $key
]);
$request = $client->createPresignedRequest($cmd, '+20 minutes');

$presignedUrl = (string) $request->getUri();

echo $presignedUrl;

现在我正在使用令牌

获取网址
https://s3-us-west-2.amazonaws.com/some-demo/one2.txt?X-Amz-Content-Sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJUZQHGPBTNOLEUXQ%2F20150828%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20150828T090256Z&X-Amz-SignedHeaders=Host&X-Amz-Expires=1200&X-Amz-Signature=77e52cf99c0f438d48851193dbaba0fsdfe1b4d8e604d6sdf11a22b3be45e410168ab81

这正是我想要的,但现在我的问题是

如何预先分配url桶中的所有项目,而不是逐个制作所有项目?

1 个答案:

答案 0 :(得分:0)

我认为有一种方法可以通过创建多个getCommands的数组来获取所有项目的预分配url,getCommand可以处理multiple commands然后你可以使用Aws \ CommandInterface的toArray()函数来转换它成阵列。 createPresignedRequest()函数不支持多个请求,您必须重复调用它或需要使用getObject()