获取预先签名的Amazon S3下载URL的最佳做法

时间:2014-03-05 12:51:41

标签: php amazon-s3

我有以下代码作为后端示例的一部分,用于生成有效15分钟的下载链接。

$url = "{$bucket}/{$key}";
$request = $this->s3Client->get($url);
return $this->s3Client->createPresignedUrl($request, '+15 minutes');

根据我的理解,这会向亚马逊提出网络请求,我需要为每个页面加载生成大约20-30个下载链接。

那么我如何不滥用亚马逊API,同时还允许客户下载文件?我能想到的两个选项是:

  1. 生成客户端链接(在点击或页面加载时)并将其存储在cookie中,以便在刷新时不会进行额外的API调用。
  2. 生成服务器端链接并将其存储在cookie或会话中。
  3. 我感兴趣的是:

    1. 生成链接的最佳做法是什么(客户端与服务器端)?
    2. 我应该如何缓存链接(即哪里)?

1 个答案:

答案 0 :(得分:2)

这不是问题,因为使用适用于PHP的AWS开发工具包创建预签名网址向AWS发出请求。您可能还会发现S3Client::getObjectUrl()方法更容易使用,因为它是您现在正在做的事情的抽象。