J'aimerais donner aux visiteurs la possibilité de télécharger des pdf. J'ai essayé:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
et quelques variations mais elles ne semblent pas fonctionner. Je continue à obtenir No route matches [GET] "/data/abc.pdf"
J'ai les fichiers pdf dans un dossier appelé data, situé dans le dossier assets .
Rails 4:
dans les itinéraires:
get "home/download_pdf"
dans le contrôleur (déjà pdf):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
dans le contrôleur (besoin de générer un 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
en vue:
<%= link_to 'Download PDF', home_download_pdf_url %>
Rails 3
La façon de le faire:
def download
send_data pdf,
:filename => "abc.pdf",
:type => "application/pdf"
end
Vous devriez aller à cette alternative
Rails <3
Fichier dans le dossier public
Cela peut vous répondre: Comment télécharger un fichier depuis l’application Rails
Vous devriez placer votre fichier dans un dossier public, c'est tout.
Devrait fonctionner lorsque le fichier est placé correctement.
Faites-moi savoir si vous ne pouvez pas déplacer votre fichier dans un dossier public.
Télécharger via le contrôleur
Créer un contrôleur avec une action de téléchargement et link_to
le
def download
send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true
end
Rails 4:
dans les itinéraires:
get "home/download_pdf"
dans le contrôleur (déjà pdf):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
dans le contrôleur (besoin de générer un 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
en vue:
<%= link_to 'Download PDF', home_download_pdf_url %>
Si les fichiers sont statiques (c'est-à-dire qu'ils ne changent pas), placez-les dans le dossier public.
Ensuite, vous pouvez télécharger comme
<a href="file.pdf" download>PDF</a>
ou avec ERB
<%= link_to 'PDF', 'file.pdf', download: '' %>
et pour donner au fichier un autre nom pour le téléchargement, il suffit de transmettre ce nom à l'option de téléchargement.
<%= link_to 'PDF', 'file.pdf', download: 'data' %>
Cela téléchargera le fichier en tant que data.pdf
au lieu de file.pdf
.
vous pouvez simplement appeler votre action de contrôleur comme ça
<%= link_to "Download", download_file_path, class: "btn btn-sm btn-default", target: "_blank" %>
et dans votre contrôleur
def download_file
redirect_to Paperclip_attachment.file.url
end
Je me bats beaucoup pour trouver un moyen simple de télécharger automatiquement certains fichiers d'un répertoire public. Enfin, je propose cette solution . Par exemple: I J'ai mon fichier dans le dossier SVG du répertoire public.
Public/svg/Test1.xlsx
Maintenant, quand j'essaie d'y accéder, chargez-le et donnez le chemin avec un trombone, c'est donner. Même lorsque j'essaie chemin complet, cela donne un problème afin que nous puissions le transformer en chemin dynamique. <% url = request.original_url.chomp (request.fullpath)%>
Maintenant, nous pouvons accéder à n’importe quel fichier dans un dossier public, comme ci-dessous.
<%= link_to 'Database File', "#{url}/svgs/Test1.xlsx", download: 'Data.xlsx',id: "Link_to_Downlaod" %>
Maintenant, cliquez sur le lien capable est prêt, nous pouvons cliquer sur le lien ci-dessus pour télécharger le fichier . Utilisez le script suivant pour télécharger automatiquement le fichier.
<script type="text/javascript">
window.onload = document.getElementById('Link_to_Downlaod').click();
</script>
</div>
Dans le cas de PDF ou de tout autre type de fichier, il suffit de modifier l'extension du fichier.