我正在尝试获取存储桶中所有对象的预签名网址。我正在使用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桶中的所有项目,而不是逐个制作所有项目?
答案 0 :(得分:0)
我认为有一种方法可以通过创建多个getCommands的数组来获取所有项目的预分配url,getCommand可以处理multiple commands然后你可以使用Aws \ CommandInterface的toArray()函数来转换它成阵列。 createPresignedRequest()函数不支持多个请求,您必须重复调用它或需要使用getObject()