send_file:PDF似乎已损坏(?)并且未触发下载,而是以broswer打开

时间:2016-11-11 11:07:20

标签: ruby-on-rails ruby pdf

这是我的routes.rb

resources :welcome do
  get :download, :on => :collection
end

我在controller

中尝试了两种变体

首先

def download
  send_file("#{Rails.root}/public/assets/resources/testing.pdf", :type => "application/pdf", :disposition => "attachment")
end

第二

def download
  send_file("#{Rails.root}/public/assets/resources/#{params[:file_name]}", :type => "application/pdf", :disposition => "attachment")
end

这是我的view,我根据控制器操作尝试了2个不同的link_to

首先

<%= link_to 'Test Paper', action: :download %>

第二

<%= link_to 'Test Paper', action: :download, file_name: 'testing.pdf' %>

他们都没有工作,我不知道为什么。我实际上看到了类似的SO post,但遗憾的是那里没有答案。

下载不会触发,它只是在浏览器中打开PDF,并以“损坏”格式呈现。我错过了什么?

2 个答案:

答案 0 :(得分:0)

试试这个。

def download
  file = File.open("#{Rails.root}/public/assets/resources/#{params[:file_name]}")
   send_data file.read, :filename => params[:file_name], :type => 'application/pdf', :x_sendfile => true
end

答案 1 :(得分:0)

如果您正在使用turbolink,则需要将data: {turbolinks: 'false'}添加到链接的属性中。

<%= link_to 'Test Paper', action: :download, data: {turbolinks: 'false'} %>

这适用于Turbolinks 5.对于以前的版本,请尝试'data-no-turbolink': true