Подтвердить что ты не робот

Ссылка для скачивания файла в рельсах

Я хотел бы дать посетителям возможность скачать какой-нибудь pdf файл. Я пробовал:

<%= link_to "abc", "/data/abc.pdf"%>

<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>

и некоторые варианты, но они, похоже, не работают. Я продолжаю получать No route matches [GET] "/data/abc.pdf"

У меня есть файлы PDF в папке с именем data, расположенной в папке с ресурсами. Любая помощь будет оценена.

4b9b3361

Ответ 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