2017-07-20 77 views
0

我想將用戶個人資料圖片存儲在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請求網址,以便用戶瀏覽器可以緩存圖像?

回答

1

而不是使用預先設定的URL機制,也許您可​​以添加一個經過身份驗證的端點到您的應用程序,並在所述端點檢索圖像?在您的img標籤等中使用此URL。此端點可以緩存圖像併爲瀏覽器提供適當的響應標頭以緩存圖像。

+2

謝謝,這是我的第一個想法,但後來我失去了完全繞過我的服務器資產的好處。 – ezero