ссылка на скачивание файла в 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
Теперь, когда я пытаюсь получить доступ к нему загрузить его и дать путь с скрепкой он дает вопрос. Даже когда я пытаюсь полный путь это дает проблему, а так мы можем сделать его динамический путь. Сначала получить путь хоста, так что можно легко перенаправить.
Теперь мы можем получить доступ к любому файлу в общей папке, как показано ниже и передать идентификатор и вариант загрузки. Опция загрузки переименуйте любой файл, который вы хотите загрузить.
<%= link_to 'Database File', "#{url}/svgs/Test1.xlsx", download: 'Data.xlsx',id: "Link_to_Downlaod" %>
Теперь нажмите кнопку возможность ссылка готова мы можем нажать на ссылку выше, чтобы загрузить файл. Используйте следующий сценарий для автоматической загрузки файла.
<script type="text/javascript"> window.onload = document.getElementById('Link_to_Downlaod').click(); </script> </div>
для случая PDF или любого другого типа файла просто нужно изменить файл расширение.