2014-03-05 48 views
1

我有以下代碼作爲後端示例的一部分,用於生成有效期爲15分鐘的下載鏈接。獲得預先簽署的Amazon S3下載URL的最佳實踐

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

從我所瞭解的情況來看,這使得對亞馬遜的網絡請求,我需要生成每頁pageload約20-30下載鏈接。

那麼我怎麼會不濫用亞馬遜API,同時仍然允許客戶端下載文件? 2.選擇我能想到的是:

  1. 生成的鏈接客戶端(無論是在點擊或頁面加載),並將它們存儲內使用cookies,以便在刷新時,沒有額外的API調用製成。
  2. 生成鏈接服務器端並將它們存儲在cookie或會話中。

什麼我感興趣的是:

  1. 什麼是生成的鏈接(客戶機與服務器端)的最佳實踐?
  2. 我應該如何緩存鏈接(即在哪裏)?
+0

我能想到的最佳解決方案是生成鏈接客戶端,攔截「onclick」事件。事實上,您無法知道客戶從您的服務器獲取頁面以及點擊您網頁上的鏈接需要多少時間,並且此解決方案可避免客戶點擊鏈接已過期的情況 – morepaolo

回答

2

這是一個不是問題的問題,因爲創建與AWS SDK的PHP預標識的URL不做出AWS的請求。你也可能發現S3Client::getObjectUrl()方法更易於使用,因爲它是對你現在正在做的事情的抽象。

+0

有趣的是,我並沒有想到在問之前實際測試了這一點,我只是假定它根據'$ request'變量和文檔做了一個請求。現在測試,它的工作原理,所以...太棒了!謝謝。 –

+1

它構建一個請求對象,以便它可以爲它創建簽名,但只是返回URL而不是執行HTTP請求。很高興爲您解決,:-) –