这是我的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,并以“损坏”格式呈现。我错过了什么?
答案 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