【问题标题】:Carrierwave + Fog(s3). Letting the users to download the file载波 + 雾(s3)。让用户下载文件
【发布时间】:2011-12-19 22:41:54
【问题描述】:

我正在开发一个项目,我必须向用户提供存储在 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 中添加了以下行。仍然没有运气。我需要一些帮助。谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我认为这是因为 S3 想要播放该文件。

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

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

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

    Content-Disposition: Attachment
    

    那么您的文件将始终被下载而不是显示。

    【讨论】:

    • 在哪里添加 content-disposition: 附件?我找不到属性 -> 元数据。
    • 是文件的属性。我在这里没有访问权限,但是点击存储桶和文件夹,点击一个文件并按属性(据我记得,有人可能会确认这一点)
    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 2012-03-16
    • 2012-08-19
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多