Rails从亚马逊斗s3 aws-sdk下载对象

时间:2016-12-07 13:55:00

标签: ruby-on-rails ruby amazon-web-services controllers

我是RoR的新手。

我正在创建一个小应用程序,用于从s3存储桶上传,删除和下载mp3对象。 (使用aws-sdk gem)。

我无法创建合适的下载控制器。我的应用程序正在下载一个名为download的文本文件,其中包含来自s3的对象引用(Aws :: S3 :: Object:0x007feb59782368)。

所有帮助将不胜感激!

这是我的代码:

controller>

  def download
    bucket = S3.bucket(S3_BUCKET.name)
    obj = bucket.object(params[:song])
    byebug
    send_data obj
  end

查看>

<%= link_to "download", "songs/download/?song=" + song.name %>

来自byebug的回复:

(byebug) send_data obj
  Rendering text template
  Rendered text template (0.0ms)
Sent data  (2.2ms)
"#<Aws::S3::Object:0x007fc3b1323c60>"
(byebug) 

3 个答案:

答案 0 :(得分:0)

尝试使用send_file代替send_data

答案 1 :(得分:0)

我考虑将HTTP 302发送到S3网址并让客户端直接从S3下载对象。通过让您的应用服务器代理响应,这意味着您的rails应用程序进程将被绑定,同时它们从s3缓冲对象,然后必须将其发送到管道。如果安全性(并且不想公开s3对象publicliy)是一个问题,那么将它们保密,并生成一个签名的URL到具有短期到期日期的对象。

答案 2 :(得分:0)

最简单的选择是创建一个包含文件源的链接。当他们点击该链接时,它将以新的方式打开并从S3自动下载。

另一种选择是使用下载功能,但我还没有阅读文档。