【问题标题】:rails send_data only works 'inline' not downloadrails send_data 只能“内联”工作,不能下载
【发布时间】:2019-10-30 22:59:43
【问题描述】:

在我的控制器中:

send_data(data,  filename: "payment_file")

在我看来:

<%= link_to 'Download File', bank_file_download_path(@bank_file_job),
    data: {no_turbolink: true}, class: "btn btn-primary btn-lg btn-block" %>

但它总是显示内联文件的内容。有人可以帮我吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我想通了。正如another answer 中已经指出的那样,需要禁用涡轮链接。但是该答案中建议的解决方案不起作用,因为在特定页面上禁用它的语法从 turbolinks 5.0 开始发生了变化。现在应该是这样的。

    <%= link_to 'Download File', file_download_path , data: {turbolinks: false}   %>
    

    【讨论】:

    • 很好的答案。升级到 Rails 5.0 可能会很棘手...处置: :attachment, x_sendfile: true 或将 send_file 的类型设置为 'csv' 将无法在没有 turbolinks: false 的情况下工作。
    【解决方案2】:

    根据文档,如果要下载,则需要设置:disposition 下载

    例如

    send_data data, filename: "payment_file", disposition: 'download' 
    

    http://apidock.com/rails/ActionController/DataStreaming/send_data

    【讨论】:

    • 感谢@Taryn 的回答。但是“处置:附件”是默认设置,因此您通常不需要指定它。如果您说“处置:内联”,那么它将在浏览器中显示内容。但是,如果您对处置一无所知,那么它默认为附件,这意味着下载应该可以工作。所以在这种情况下这不是问题
    • 很高兴听到您找到了真正的解决方案。通过明确的方式检查任何默认值通常是值得的......有时你会发现其他地方的魔法改变了你的默认值。
    【解决方案3】:

    不要忘记在文件名中添加格式,例如应该以 .pdf 结尾,以便浏览器知道该做什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      相关资源
      最近更新 更多