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

Download file redirecting from Amazon S3 to Client

我是 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 的发送重定向:

用户请求 /file1 => 服务器 "translates" /file1/company.s3.amazon/mybucket/file1.pdf 并发送重定向到 Amazon S3 link.

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

谢谢。

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

预签名URL包括:

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

预签名 URL 可以通过几行代码 生成 并且仅在 GET 时 评估 请求发送到 Amazon S3。

当您的应用程序(在服务器上)确定用户有权访问文件时,它可以生成预签名的 URL 和 return 它作为网页的一部分(例如在 hyperlink 中)。当用户单击 link 时,文件将 直接从 S3 提供。过期后,URL 将不再提供对该文件的访问权限。