从aws s3下载rails controller

时间:2013-02-07 18:31:14

标签: ruby-on-rails controller amazon-s3 download

我正在尝试为我的用户构建一种非常简单的方法,通过我的网站从aws下载音频内容。这是流程:

  1. 我给用户一个下载链接。例如:www.mysite.com/foobar
  2. 用户点击链接。
  3. 在我的rails控制器中,我创建了一个过期的aws s3网址,并自动开始从该网址下载音频内容。
  4. 用户的浏览器应询问用户是否保存文件。如果用户接受保存文件,我希望回调我的rails应用程序以记录用户实际下载的文件。
  5. 因此,从用户的角度来看,我希望该过程与我确定的URL一样简单,并在提示时接受下载文件。

    在后台,我想保持aws s3 url对用户隐藏,我希望在用户接受下载后能够灵活地编写回调逻辑。

    实现这一目标的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

解决此问题的最佳方法是创建一个生命周期很短(10分钟?)的S3网址,并返回重定向到S3网址。这确实会将S3网址暴露给用户,但不是漏洞。

如果要隐藏S3 URL,则需要通过服务器代理下载,这很昂贵,并且会长时间使用工作进程。我不推荐这个,但它是隐藏S3资源的唯一方法。

此外,如果触发下载与视图非常重要,则需要设置Content-Disposition标头以触发附件下载:

  Content-Disposition: attachment; filename="fname.ext"