heroku - 如何从 Rails 应用程序提供 S3 文件?

标签 heroku amazon-s3 ruby-on-rails-3.1 content-disposition

我试图允许用户通过左键单击链接来下载 S3 文件。通常,他们必须通过右键单击并另存为来完成。

我查看了 http://apidock.com/rails/ActionController/DataStreaming/send_file但不确定这是否是我想要的。

本文http://www.jtricks.com/bits/content_disposition.html基本上展示了如何通过配置 Apache 来完成它。但是,我们正在使用 Heroku。

之前有人使用过 Content-Disposition 来提供来自 S3 的文件吗?还想知道这是否占用了整个网络进程(Dyno)?或者,如果整个过程发生在 S3 服务器上?

我试过:

send_file 'http://some_bucket_name.s3.amazonaws.com/uploads/users/28/songs/88/test.mp3', :type => 'audio/mp3', :disposition => 'attachment'

我得到:
Cannot read file http://some_bucket_name.s3.amazonaws.com/uploads/users/28/songs/88/test.mp3

该文件确实存在。如果我手动导航到 url。该文件播放良好。

最佳答案

这适用于 Rails 3。在您的 Controller 中执行以下操作:

response.headers['Content-Disposition'] = "attachment; filename=#{original_filename}"
self.response_body = proc { |response, output|
  AWS::S3::S3Object.stream(path, 'some_bucket_name') { |segment|
    output.write segment
  }
}

在你的情况下:
original_filename = 'test.mp3'
path = '/uploads/users/28/songs/88/test.mp3'

关于heroku - 如何从 Rails 应用程序提供 S3 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7691101/

相关文章:

node.js - 使用 Node.JS 列出所有目录和所有文件并将它们上传到我的存储桶(S3 Amazon)

jquery - 什么所见即所得与 jQuery 和 Ruby on Rails 3.1 (Sprockets) 配合得很好?

mysql - Heroku,无法推送我的数据库

node.js - Node child_process 与 Heroku 工作线程

php - Symfony 4 和 Amazon S3 - AWS 凭证不起作用

amazon-s3 - 托管在 Amazon S3 上的图像的自定义 URL

ruby-on-rails-3.1 - "ReferenceError: $ is not defined"使用带有 Rails 3.1 的 CoffeeScript TextMate 包

ruby-on-rails - #<ActionDispatch::Http::UploadedFile:0x007fae8c0bfaa8> 的未定义方法 `[]'

svn commit后Git推送自动部署到Heroku?

php - Heroku 和亚马逊 RDS 设置失败