【问题标题】:Get presigned url of all objects in bucket amazon aws s3获取存储桶 amazon aws s3 中所有对象的预签名 URL
【发布时间】:2015-11-22 23:13:18
【问题描述】:

我正在尝试获取存储桶中所有对象的预签名 URL。我正在使用亚马逊 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,所以我创建了一个由

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

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

echo $presignedUrl;

现在我正在获取带有令牌的 url

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,而不是一个一个地为所有项目制作?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我可以使用令牌之类的东西来获取这些网址吗?
    • 我使用的是版本 3 的 api 而不是 2
    猜你喜欢
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2015-10-23
    • 2020-11-29
    • 2012-04-12
    相关资源
    最近更新 更多