【问题标题】:Rails 5 broke send_file method?Rails 5 破坏了 send_file 方法?
【发布时间】:2016-09-15 14:05:35
【问题描述】:

我最近将我的应用程序升级到 Rails 5 并且我的下载停止工作。当我点击下载按钮时,浏览器挂起,没有任何反应。

class DownloadsController < ApplicationController
  def download
    send_file(
      "#{Rails.root}/public/file.rtf",
      filename: "file.rtf",
      type: :rtf,
      disposition: "attachment"
    )
  end
end

我有 rtf mimetype

Mime::Type.register "text/richtext", :rtf

显示一切正常的日志

Sent file /home/deploy/app/releases/20160518213049/public/file.rtf (0.4ms)
I, [2016-05-18T17:34:48.435946 #20202]  INFO -- : [d02e8ea3-53da-440d-b3b1-cc6bfd6524dc] Completed 200 OK in 17ms (ActiveRecord: 4.4ms)

【问题讨论】:

  • 所有浏览器都会出现这种情况吗?另外,您是否尝试查看 devtools 的网络选项卡并查看发生了什么?
  • 是的,它发生在 Safari、Chrome 和 Mozilla 中。 Devtools 显示 GET 200 xhr 2s。也许值得一提的是,我使用 ActionCable
  • 哦,是的...您还不能通过 ajax/ws 调用保存文件 :) 一种解决方法是创建一个 iframe 并将其源设置为您的下载 URL。
  • 实际上,我没有进行任何 ajax 调用。这只是规则 link_to 标签。然而,turbolinks 做到了。将'data-turbolinks' =&gt; false 添加到link_to 标签解决了这个问题。不知道为什么它以前没有这个标签就可以工作
  • 这很奇怪。我也遇到了同样的问题,这对我也有用。 github上是否有任何问题开放?感谢您分享修复程序。

标签: ruby-on-rails download mime-types


【解决方案1】:

正如上面 cmets 中详述的那样,解决方案是禁用 link_to 的 turbolink。这可以通过使用 data-turbolinks="false" 描述 here 来完成,对于 Turbolinks 5

<%= link_to "Foo", new_foo_path(@foo), data: { turbolinks: false } %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多