2013-10-19 66 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

相关问题