下载从Amazon S3重定向到客户端的文件

时间:2016-11-21 09:18:10

标签: amazon-web-services amazon-s3 http-headers aws-sdk

我是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)

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

我的第一种方法(还没有实现!)是从我的服务器到Amazon S3的sendredirect:

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

通过这种方法,我认为我无法验证IAM用户(我不使用任何API),但我也认为我可以通过服务器IP地址的Bucket Policy过滤来保护内容。

感谢。

1 个答案:

答案 0 :(得分:1)

我建议使用Pre-Signed URL,这是一种提供存储在Amazon S3中的临时访问私有对象的方法。

预签名网址包含:

  • 文件网址
  • 与有权获取文件的用户相关联的访问密钥
  • 到期时间戳
  • 基于授权用户的密钥(与其访问密钥匹配)的散列签名

预先签名的网址可以从几行代码中生成,并且只有在将GET请求发送到Amazon S3时才会评估

当您的应用程序(在服务器上)确定用户有权访问该文件时,它可以生成预先签名的URL并将其作为网页的一部分返回(例如,超链接)。当用户点击该链接时,该文件将直接从S3 提供。到期后,URL将不再提供对文件的访问权。