Comment faire pour télécharger un fichier à partir de l'application rails

Je n'arrive pas à trouver un moyen simple et claire réponse à ce problème n'importe où! Tout semble obsolète ou incomplète!

Je veux juste que l'utilisateur puisse cliquer sur un lien ou un bouton et de télécharger un fichier (qui est quelque part dans le dossier public)

J'ai essayé ceci:

#view
<%= link_to "Raw blast output" ,:action => :download, :file_name => "public/data/02_blastout/#{@bl_file}" %>
#controller
def download
    send_file "#{RAILS_ROOT}/#{params[:file_name]}"
end

mais j'obtiens cette erreur:

No route matches {:action=>"download", :file_name=>"public/data/02_blastout/input0.fa_x_Glyma1aaunq.bl", :controller=>"cvits"}

Merci pour l'aide!!

  • peut-être que c' ap.rubyonrails.org/classes/ActionController/Streaming.html ?
  • Cela semble terriblement dangereux façon de gérer cela, compte tenu en particulier, vous pouvez tout simplement un lien directement vers le fichier.
  • utilisez quoi? Je suis déjà à l'aide de la send_file méthode.
  • Quelqu'un pourrait modifier votre lien comme ceci: ?file_name=config/database.yml
  • Je serais plus qu'heureux d'entendre parler de la "bonne voie" pour un utilisateur afin d'obtenir un fichier!!! Ouvert à toutes suggestions!
  • Eh bien, si le fichier est dans le public, que vous pouvez simplement leur donner un lien vers elle. Rien en public est disponible sous la racine du site. Quelque chose comme /public/thing.png est disponible en /thing.png.
  • send_file ne devrait jamais être donné à un chemin d'accès défini par un paramètre, cela ouvre un trou de sécurité majeur que les utilisateurs malveillants d'exploiter.
  • Merci c'est exactement ce que je veux! Désolé, encore assez nouveau pour le développement web et rails en particulier. 🙂 stackoverflow a un meilleur temps de réponse que n'importe quel autre forum!

InformationsquelleAutor bdeonovic | 2011-06-17