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.

53
demandé sur felipeclopes 2012-10-31 22:04:27

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
57
répondu felipeclopes 2017-06-16 20:44:26

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 %>
72
répondu rusllonrails 2013-12-25 09:10:09

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 .

16
répondu Cruz Nunez 2016-07-11 19:54:07

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
3
répondu Muhammad Nasir Shamshad 2016-08-19 08:40:49

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.

0
répondu Hafiz Abdul Rehman 2018-04-10 13:12:30