web-dev-qa-db-fra.com

lien de téléchargement de fichier dans les rails

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 .

54
Ionut Hulub

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
64
felipeclopes

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 %>
73
rusllonrails

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.

17
Cruz Nunez

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
3

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.

0
Hafiz Abdul Rehman