Carrierwave + Fog(s3)。让用户下载文件

时间:2011-12-19 07:26:38

标签: ruby-on-rails ruby

我正在开发一个项目,我必须为用户提供存储在s3中的文件的下载链接。最初我试过,

link_to "Download", @medium.file.url

但是这会直接在浏览器上打开文件。当我尝试下载mp4文件时,chrome开始自动播放。我不希望这种情况发生。所以我使用send_file来完成这项任务,

def download
  @medium = Medium.find(params[:id])
  send_file @medium.file.url
end

在我的本地,我已将存储设置为文件,我已对此进行了测试,这非常合适。但是在暂存时,文件是从s3提供的,我总是得到 ActionController :: MissingFile 。我的应用程序托管在heroku上。我还想知道使用send_file是不错的选择还是有更好的方法。

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

当我在谷歌搜索时,我发现应该启用发送文件的nginx标头设置进行制作。我在config / environments / production.rb中添加了以下行。仍然没有运气。我需要一些帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我认为这是因为S3希望播放文件。

我在这里无法访问我的S3,但是我通过在S3控制面板中更改PDF文件的操作(显示在我的案例中)解决了这个问题。

如果你可以解决这个问题,我认为你可以完全避免使用send_file。

编辑:我现在设法访问S3。转到属性 - >元数据,并添加密钥

Content-Disposition: Attachment

然后,您的文件将始终下载而不是显示。