rails 中的 send_file 不会下载到浏览器 - 而是直接在浏览器 window 中加载

send_file in rails does not download to browser - instead loads in browser window directly

我的 .erb 中有以下内容:

<%= link_to 'Download PDF', planners_download_pdf_url %>

我有以下回复方式:

  def download_pdf
  send_file(
     "#{Rails.root}/Thing/ex/example.xls",
filename: "mything.xls",
type: "application/xls"
  )
  end

我的路线有:

get '/planners/download_pdf'

当我单击我的 link 时,该方法会被调用。我的问题是没有下载到浏览器。相反,它使用我在浏览器中打开的选项卡并将文件转储为 HTML。比如...您见过用记事本打开 Excel 文件吗?它就是这样做的。见下文:

我如何获取此文件而不是下载文件?

您需要将 disposition: 'attachment' 添加到您的 send_file 选项哈希(或者至少确保您没有设置 disposition: 'inline',因为 'attachment' 应该是默认值).

如果这不是问题,如果您正在使用 Turbolinks,如 other answers you need to disable Turbolinks on the link 中所述,通过在 link 元素中设置 data-turbolinks="false"(例如: data: {turbolinks: false} 在你的 link_to 标签助手中)。

最后,如果这不起作用,还可以尝试其他一些方法:

  • type 设置为 'application/vnd.ms-excel',XLS 文件的有效 MIME 类型。
  • 直接在 link 标签上设置 download="mything.xls" html5 attribute(例如:download: 'mything.xls' 在您的 link_to 标签助手中。