【问题标题】:Rails download objects from amazon bucket s3 aws-sdkRails 从亚马逊存储桶 s3 aws-sdk 下载对象
【发布时间】:2016-12-10 03:44:24
【问题描述】:

我是 RoR 的新手。

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

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

我们将不胜感激!

这是我的代码:

控制器 >

  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) 

【问题讨论】:

  • 你试过读出对象吗? aws.amazon.com/blogs/developer/…
  • 今天早上我已经检查了无数次那个链接,但我无法让我的控制器工作......读取不起作用。
  • 您是否尝试将对象写入临时文件,然后使用 send_file?我发现这是非常有效的。你是什​​么意思阅读不起作用?
  • 我会考虑向 S3 url 发送 HTTP 302 并让客户端直接从 S3 下载对象。通过让您的应用程序服务器代理响应,这意味着您的 Rails 应用程序进程将被绑定,同时它们缓冲来自 s3 的对象,然后必须将其发送到管道

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


【解决方案1】:

尝试使用send_file 而不是send_data

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      最简单的选择是创建与文件源的链接。当他们单击该链接时,它将在新的点击中打开并自动从 S3 下载。

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

      【讨论】:

        猜你喜欢
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-03
        • 2011-06-26
        • 1970-01-01
        • 2017-03-06
        相关资源
        最近更新 更多