首页 文章

AWS S3 Presigned Request Cache

提问于
浏览
0

我想将用户 Profiles 图片存储在S3存储桶中,但要将这些图像保密 . 为了做到这一点,我每当需要图像时都会创建一个预先指定的URL . 但是,这会每次创建一个唯一的URL,这意味着浏览器永远不会缓存图像,我最终会在GET请求中支付更多费用 .

这是我生成网址的代码示例,我使用的是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但它实际上会增加剩余的秒数,这是一个例子:

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西-2%2Fs3%2Faws4_request&X-AMZ-日期= 20170720T112123Z&X-AMZ-SignedHeaders =宿主&X-AMZ-过期= 391117&X-AMZ-签名= XXXXXXXXX

Is it possible to generate a repeatable presigned request url so that an image may be cached by the users browser?

1 回答

  • 1

    也许您可以将经过身份验证的 endpoints 添加到应用程序并在所述 endpoints 内检索图像,而不是使用预先签名的URL机制?在 img 标签中使用此URL等 . 此 endpoints 可以缓存映像并为浏览器提供适当的响应标头以缓存映像 .

相关问题