【发布时间】:2017-12-26 01:58:48
【问题描述】:
我想将用户个人资料图片存储在 S3 存储桶中,但将这些图片保密。为了做到这一点,每当需要图像时,我都会创建一个预签名的 url。但是,这每次都会创建一个唯一的 url,这意味着图像永远不会被浏览器缓存,我最终会在 GET 请求中支付更多费用。
这是我生成 url 的代码示例,我使用的是 Laravel:
$s3 = \Storage::disk('s3');
$client = $s3->getDriver()->getAdapter()->getClient();
$expiry = new \DateTime('2017-07-25');
$command = $client->getCommand('GetObject', [
'Bucket' => \Config::get('filesystems.disks.s3.bucket'),
'Key' => $key
]);
$request = $client->createPresignedRequest($command, $expiry);
return (string) $request->getUri();
我认为通过指定一个日期时间而不是一个时间单位,它会创建相同的 url,但实际上它会将剩余的秒数添加到 url,这是一个示例:
xxxx.s3.eu-west-2.amazonaws.com/profile-pics/92323.png?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential =AXXXXXXXXXXXX%2Feu-west-2%2Fs3%2Faws4_request&X-Amz-Date=20170720T112123Z&X-Amz-SignedHeaders=host&X-Amz-Expires=391117&X-Amz-Signature=XXXXXXXXX
是否可以生成可重复的预签名请求 url,以便用户浏览器缓存图像?
【问题讨论】:
-
你可以在这里查看我的答案:stackoverflow.com/questions/53205295/…
标签: php amazon-web-services caching amazon-s3 aws-sdk