ссылка на скачивание файла в 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 53

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 или любого другого типа файла просто нужно изменить файл расширение.