2016-11-21 105 views
0

我非常新手与Amazon S3和我想建立一个也许不存在的解决方案。下载文件从Amazon S3重定向到客户端

我必须建立一个Web应用程序(Java或PHP后端),其中用户登录和下载文件。 Web服务器(Tomcat或Apache)验证用户并允许从Amazon S3下载。 当我使用CMS时,文件很小,并且很少有请求。因此,流程是:

Client (User) > Server (user validation) > CMS (get file) > Server > Client (User) 

现在,这些文件是大,我想获得下一流程:

Client (User) > Server (user validation) > Amazon S3 > Client (User) 

我的目标是提高我的服务器的性能,并避免过多用户获取文件时的文件流量。 这可能吗?

我的第一种方法(不implemet呢!)是从我的服务器到Amazon S3上的sendRedirect:

用户请求/file1 =>服务器 “翻译” /file1/company.s3.amazon/mybucket/file1.pdf并执行的sendRedirect到Amazon S3的链接。

通过这种方法,我想我不能验证IAM用户(我不使用任何API),但我也觉得我可以保护与服务器IP地址的桶策略过滤的内容。

谢谢。

回答

1

我会建议使用Pre-Signed URL,这是提供给被存储在亚马逊S3私有对象临时访问的方式。

预标识的URL包括:

  • 文件URL
  • 访问密钥与有权限来获取文件
  • 的到期时间戳
  • A的用户相关联基于散列的签名授权用户的密钥(这是与他们的访问密钥匹配)

预先签名的URL可以是生成的,只需几行代码即可,只有评估 GET请求发送到Amazon S3时。

当你的应用程序(在服务器上),确定该用户是有权访问该文件,它可以生成预签名URL和(在超链接EG)返回它作为一个网页的一部分。当用户点击该链接时,文件将被直接送达了S3的。到期后,URL将不再提供对该文件的访问权限。

+0

或者作为'302'重定向到从'GET/file1'预签网址 - 它建立的网址在你的代码,授权请求后。 –

+0

谢谢你的回答。我想我必须在我的webapp中使用这两种解决方案。 – Miguel