lien de téléchargement de fichier dans les rails
je voudrais donner aux visiteurs la possibilité de télécharger un pdf. J'ai essayé:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
et quelques variantes mais elles ne semblent pas fonctionner. Je reçois des No route matches [GET] "/data/abc.pdf"
j'ai les fichiers pdf dans un dossier appelé data, situé dans le dossier assets. Toute aide serait appréciée.
5 réponses
Rails 4:
sur les itinéraires:
get "home/download_pdf"
dans controller (déjà en 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 du 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 %>
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
Ce mai la la réponse pour vous: Comment faire pour télécharger un fichier à partir de l'application rails
vous devez placer votre fichier dans le dossier public, c'est le truc.
Doit fonctionner lorsque le fichier est placé correctement.
dites - moi si vous ne pouvez pas déplacer votre fichier de dossiers publics.
télécharger via contrôleur
créer un contrôleur avec une action downlaod et link_to
it
def download
send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true
end
Rails 4:
sur les itinéraires:
get "home/download_pdf"
dans controller (déjà en 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 du 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 %>
si les fichiers sont statiques (ce qui signifie qu'ils ne changent pas), placez-les dans le dossier public.
alors 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 passer ce nom à l'option de téléchargement
<%= link_to 'PDF', 'file.pdf', download: 'data' %>
ceci téléchargera le fichier comme data.pdf
au lieu de file.pdf
.
vous pouvez simplement appeler votre action de contrôleur comme ceci
<%= 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
j'ai beaucoup de mal à trouver un moyen simple D'Auto Downlaod certains fichiers de L'annuaire Public. Enfin j'arrive avec cette solution. exemple: j'ai mon fichier dans le dossier SVG à l'intérieur du répertoire Public.
Public/svg/Test1.xlsx
maintenant quand j'essaie d'y accéder chargez-le et donnez le chemin avec le trombone il donne le numéro. Même quand j'essaie le chemin complet il donne question ainsi nous pouvons le rendre le chemin dynamique. Tout d'abord obtenir le chemin de L'hôte de sorte que peut rediriger facilement. <% URL= demande.original_url.chomp(requête.fullpath) % >
maintenant nous pouvons accéder à n'importe quel fichier dans le dossier Public comme ci-dessous et passer id et option de téléchargement. Option de téléchargement renommer tout fichier que vous voulez télécharger.
<%= link_to 'Database File', "#{url}/svgs/Test1.xlsx", download: 'Data.xlsx',id: "Link_to_Downlaod" %>
maintenant, cliquez sur le lien en mesure 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>
pour le cas de PDF ou tout autre autre type de fichier suffit de changer l'extension de fichier.