Ссылка для скачивания файла в рельсах
Я хотел бы дать посетителям возможность скачать какой-нибудь pdf файл.
Я пробовал:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
и некоторые варианты, но они, похоже, не работают. Я продолжаю получать No route matches [GET] "/data/abc.pdf"
У меня есть файлы PDF в папке с именем data, расположенной в папке с ресурсами.
Любая помощь будет оценена.
Ответы
Ответ 1
Рельсы 4:
в маршрутах:
get "home/download_pdf"
в контроллере (уже есть pdf):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
в контроллере (необходимо создать pdf):
require "prawn"
class ClientsController < ApplicationController
def download_pdf
client = Client.find(params[:id])
send_data generate_pdf(client),
filename: "#{client.name}.pdf",
type: "application/pdf"
end
private
def generate_pdf(client)
Prawn::Document.new do
text client.name, align: :center
text "Address: #{client.address}"
text "Email: #{client.email}"
end.render
end
end
в поле зрения:
<%= link_to 'Download PDF', home_download_pdf_url %>
Рельсы 3
Способ сделать это:
def download
send_data pdf,
:filename => "abc.pdf",
:type => "application/pdf"
end
Вы должны перейти к этой альтернативе
Rails < 3
Файл в общей папке
Это может дать вам ответ: Как загрузить файл из приложения rails
Вы должны поместить свой файл в общую папку, т.е. трюк.
Должен работать, когда файл установлен правильно.
Сообщите мне, если вы не можете переместить файл в общую папку.
Загрузка через контроллер
Создайте контроллер с действием downlaod и link_to
it
def download
send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true
end
Ответ 2
Рельсы 4:
в маршрутах:
get "home/download_pdf"
в контроллере (уже есть pdf):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
в контроллере (необходимо создать pdf):
require "prawn"
class ClientsController < ApplicationController
def download_pdf
client = Client.find(params[:id])
send_data generate_pdf(client),
filename: "#{client.name}.pdf",
type: "application/pdf"
end
private
def generate_pdf(client)
Prawn::Document.new do
text client.name, align: :center
text "Address: #{client.address}"
text "Email: #{client.email}"
end.render
end
end
в поле зрения:
<%= link_to 'Download PDF', home_download_pdf_url %>
Ответ 3
Если файлы являются статическими (это означает, что они не изменяются), поместите их в общую папку.
Затем вы можете скачать как
<a href="file.pdf" download>PDF</a>
или с ERB
<%= link_to 'PDF', 'file.pdf', download: '' %>
и предоставить файлу другое имя для загрузки, просто передайте это имя в параметр загрузки
<%= link_to 'PDF', 'file.pdf', download: 'data' %>
Это загрузит файл как data.pdf
вместо file.pdf
.
Ответ 4
вы можете просто вызвать действие своего контроллера, как это
<%= link_to "Download", download_file_path, class: "btn btn-sm btn-default", target: "_blank" %>
и в вашем контроллере
def download_file
redirect_to paperclip_attachment.file.url
end