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.
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
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 %>
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.
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.