ссылка для загрузки файла в rails
Я хотел бы дать посетителям возможность загрузить некоторые pdf. Я пробовал:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
и некоторые вариации, но они не работают. Я продолжаю получать No route matches [GET] "/data/abc.pdf"
у меня есть pdf-файлы в папке data, расположенной в папке assets. Любая помощь будет оценена.
5 ответов
рельсы 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
вы должны поместить свой файл в общую папку, это трюк.
должен работать, когда файл размещен правильно.
Дайте мне знать, если вы не можете переместить файл в папку Public.
скачать через регулятор
создайте контроллер с действием downlaod и link_to
это
def download
send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true
end
рельсы 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 %>
если файлы статические (то есть они не меняются), поместите их в общую папку.
затем вы можете скачать, как
<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
.
вы можете просто вызвать действие контроллера такой
<%= link_to "Download", download_file_path, class: "btn btn-sm btn-default", target: "_blank" %>
и в геймпаде
def download_file
redirect_to paperclip_attachment.file.url
end
Я много борюсь, чтобы найти простой способ автоматического Downlaod какой-то файл из общего каталога. В конце концов я пришел к такому решению. например: у меня есть файл в папке SVG внутри общего каталога.
Public/svg/Test1.xlsx
Теперь, когда я пытаюсь получить к нему доступ, загрузите его и дайте путь с скрепкой, это даст проблему. Даже когда я пробую полный путь, он дает проблему, поэтому мы можем сделать его динамическим путем. Сначала получите путь хоста, чтобы его можно было легко перенаправить.
Теперь мы можем получить доступ к любому файлу в общей папке, как показано ниже и передайте id и вариант загрузки. Опция загрузки переименуйте любой файл, который вы хотите загрузить.
<%= link_to 'Database File', "#{url}/svgs/Test1.xlsx", download: 'Data.xlsx',id: "Link_to_Downlaod" %>
Теперь нажмите able link готов мы можем нажать на ссылку выше, чтобы загрузить файл. Используйте следующий сценарий для автоматической загрузки файла.
<script type="text/javascript">
window.onload = document.getElementById('Link_to_Downlaod').click();
</script>
</div>
для случая PDF или любого другого типа файла просто нужно изменить файл расширение.