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

时间:2011-10-07 18:02:52

标签: 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

该文件确实存在。如果我手动导航到网址。文件播放正常。

2 个答案:

答案 0 :(得分:2)

这适用于Rails 3.在你的控制器中执行:

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'

答案 1 :(得分:0)

试 send_data AWS :: S3.new.buckets ['music']。objects [“path / to / your / file.mp3”]。read,filename:“some_file_name.mp3”