it-swarm.com.de

link zum Herunterladen von Dateien in Schienen

Ich möchte den Besuchern die Möglichkeit geben, ein PDF herunterzuladen. Ich habe versucht:

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

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

und einige Variationen, aber sie scheinen nicht zu funktionieren. Ich bekomme immer No route matches [GET] "/data/abc.pdf"

Ich habe die pdf-Dateien in einem Ordner namens data, der sich im Assets-Ordner befindet.

54
Ionut Hulub

Rails 4:

in routen:

get "home/download_pdf"

im Controller (bereits pdf):

def download_pdf
  send_file(
    "#{Rails.root}/public/your_file.pdf",
    filename: "your_custom_file_name.pdf",
    type: "application/pdf"
  )
end

im Controller (muss pdf erzeugen):

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

im Hinblick auf:

<%= link_to 'Download PDF', home_download_pdf_url %>

Schienen 3

Der Weg, es zu tun:

def download
  send_data pdf,
    :filename => "abc.pdf",
    :type => "application/pdf"
end

Sie sollten zu dieser Alternative gehen

Schienen <3

Datei im öffentlichen Ordner

Dies kann die Antwort auf Sie sein: So laden Sie eine Datei aus der Rails-Anwendung herunter

Sie sollten Ihre Datei in einem öffentlichen Ordner ablegen, das ist der Trick.

Sollte funktionieren, wenn die Datei korrekt platziert wurde.

Lassen Sie mich wissen, wenn Sie Ihre Datei nicht in den öffentlichen Ordner verschieben können.

Download über Controller

Erstellen Sie einen Controller mit einer Downlaod-Aktion und link_to it

  def download
    send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true
  end
64
felipeclopes

Schienen 4:

in routen:

get "home/download_pdf"

im Controller (bereits pdf):

def download_pdf
  send_file(
    "#{Rails.root}/public/your_file.pdf",
    filename: "your_custom_file_name.pdf",
    type: "application/pdf"
  )
end

im Controller (muss pdf erzeugen):

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

im Hinblick auf:

<%= link_to 'Download PDF', home_download_pdf_url %>
73
rusllonrails

Wenn die Dateien statisch sind (dh sich nicht ändern), legen Sie sie im öffentlichen Ordner ab.

Dann kannst du gerne herunterladen

<a href="file.pdf" download>PDF</a>

oder mit ERB

<%= link_to 'PDF', 'file.pdf', download: '' %>

um der Datei einen anderen Namen zum Herunterladen zu geben, übergeben Sie diesen Namen einfach an die Download-Option

<%= link_to 'PDF', 'file.pdf', download: 'data' %>

Dadurch wird die Datei als data.pdf anstelle von file.pdf heruntergeladen.

17
Cruz Nunez

sie können Ihre Controller-Aktion einfach so aufrufen 

<%= link_to "Download", download_file_path, class: "btn btn-sm btn-default", target: "_blank" %>

und in Ihrem Controller 

def download_file
 redirect_to Paperclip_attachment.file.url
end

Ich habe viel zu tun, um einen einfachen Weg zum automatischen Herunterladen einiger Dateien aus dem öffentlichen Verzeichnis zu finden. Zum Schluss komme ich zu dieser Lösung . Zum Beispiel: Ich habe meine Datei im SVG-Ordner im Öffentlichen Verzeichnis.

Public/svg/Test1.xlsx

Wenn ich versuche, darauf zuzugreifen, lade es und gebe Pfad mit Büroklammer. Auch wenn ich vollen Pfad ausprobiere, gibt es auch ein Problem, so dass wir einen dynamischen Pfad erstellen können. <% url = request.original_url.chomp (request.fullpath)%>

Jetzt können wir auf alle Dateien im öffentlichen Ordner zugreifen. Siehe unten Und Pass-ID und Download-Option . Download-Option Benennen Sie jede Datei um, die Sie herunterladen möchten.

<%= link_to 'Database File', "#{url}/svgs/Test1.xlsx", download: 'Data.xlsx',id: "Link_to_Downlaod" %>

Jetzt Klicken Sie auf den Link In der Lage, dass der Link verfügbar ist, können wir auf den Link Above klicken, um die Datei herunterzuladen. Verwenden Sie das folgende Skript, um die Datei automatisch herunterzuladen. 

  <script type="text/javascript">
    window.onload = document.getElementById('Link_to_Downlaod').click();
  </script>
</div>

Für den Fall von PDF oder einem anderen Dateityp muss nur die Dateierweiterung geändert werden.

0