2013-10-19 69 views
10

我想創建一個一次下載鏈接到亞馬遜s3託管的文件。該鏈接在文件下載完成後即失效。如何創建一次性使用Amazon S3的下載鏈接?

我想讓這個文件仍然託管,但訪問者只能下載一次該文件。

我需要這個場景是:我有一個文件下載網站,用戶爲文件付費。我希望用戶只能從網站(和Amazon s3)下載文件一次,我也不希望用戶能夠與其他人共享直接下載鏈接。

如果這是不可能的,我想知道如果可能的話用IP地址或Cookie來限制它是否更有效?

+0

我建議你將自己的文件託管在自己託管的網站上,並使用服務器端腳本語言(如php – 2013-10-19 15:35:18

回答

12

沒有辦法告訴S3允許鏈接僅被使用一次。但是,您可以創建一個只能在指定時間內使用的鏈接。我所做的是將請求者重定向到幾分鐘內到期的S3鏈接,因此他或她沒有時間分享它。只要瀏覽器有時間接收重定向響應並遵循它,就可以使該過期時間非常短,甚至幾秒鐘。

+1

)進行下載。這聽起來適合我的sitatuion關於如何去關於這個? – Muggles

+0

我看到你正在使用PHP。我沒有編程,但亞馬遜有一個SDK,它看起來像createPresignedUrl方法是你應該使用的。它的記錄在http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_createPresignedUrl –

+0

因此,您的網頁將包含一個指向您的URL的鏈接現場。點擊該網址會導致您的網站向您剛剛創建的預先簽名的網址發送重定向響應,並在一分鐘內過期。 –

3

您可以編寫「一次性url生成器」服務(以網站或rest API的形式)並利用aws聯邦用戶功能來實現此目的。

考慮下面的程序:

  • 當用戶想要一次性的網址,他們將請求發送給您的「一 時間URL生成」服務。
  • 您的服務會生成「一次性URL」並將其返回給用戶。 url是用戶想要的S3資源的一對一映射。
  • 當用戶向「一次性URL」發出請求時,該服務將使用AWS聯合用戶功能創建一個臨時用戶,並代表臨時用戶生成一個S3預先登記的url。
  • 服務將響應發送回用戶,重定向到預先登記的url。
  • 用戶按照重定向,並開始下載文件。
  • 該服務然後刪除臨時用戶。 (或者讓它過期。)
+0

任何開源項目都有這個功能嗎? –

+0

@Stef試試這個:https://github.com/joshpangell/single-use –

+0

@AviParshan有沒有類似的Java庫? – sinu

相關問題