我想将用户个人资料图片存储在S3存储桶中,但保留这些图像的私密性。为了做到这一点,我会在需要图像时创建预先注册的url。但是,这会每次都会创建一个唯一的url,这意味着该图像将永远不会被浏览器缓存,并且最终我会在GET请求中付出更多。AWS S3预定请求缓存
这里,我使用Laravel我的代码来生成URL的例子:
$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 = AXXXXXXXXXXX%2Feu-west-2% 2Fs3%2Faws4_request & X-AMZ-日期= 20170720T112123Z & X-AMZ-SignedHeaders =宿主& X-AMZ-过期= 391117 & X-AMZ-签名= XXXXXXXXX
是否有可能产生一个可重复的presigned请求网址,以便用户浏览器可以缓存图像?
谢谢,这是我的第一个想法,但后来我失去了完全绕过我的服务器资产的好处。 – ezero