J'utilise Rails 3.1.0.rc8 et Chromium 15.0.874.102.dans les rails, impossible d'ignorer le nom de fichier content-disposition
Je souhaite définir le nom de fichier d'un téléchargement CSV. Je suis ce SO solution, mais je me trouve incapable de modifier le filename
de l'en-tête Content-Disposition
.
Voici mon code:
module ActionController
module CSVHelper
def render_csv options={}
if request.env['HTTP_USER_AGENT'] =~ /msie/i
headers['Pragma'] = "public"
headers['Content-Type'] = "text/plain"
headers['Cache-Control'] = "no-cache, must-revalidate, post-check=0, pre-check=0"
headers['Expires'] = "0"
else
headers['Content-Type'] = "text/csv"
end
filename = generate_filename options.delete(:basename)
headers['Content-Disposition'] = "attachment; filename=#{filename}"
end
def generate_filename basename=nil, suffix="csv"
filename = basename || params[:action]
filename << ".#{suffix}"
filename
end
end
end
Et dans mon contrôleur:
respond_to do |format|
format.html
format.csv do
render_csv(:basename => "my_filename")
Rails.logger.debug "HEADERS: #{headers.to_s}"
end
end
Dans mon journal:
[2011-11-28 12:25:49.611] DEBUG - HEADERS: {"Content-Type"=>"text/csv", "Content-Disposition"=>"attachment; filename=my_filename.csv"}
Dans l'outil Inspecteur de réseau de chrome, je vois ce qui suit dans mes en-têtes de réponse:
Content-Type: text/plain
Content-Disposition: attachment; filename=index.csv
Si je change le Content-Type
à quelque chose comme foo/bar
, je vois le changement venir à travers dans mon outil d'inspecteur de réseau. Peu importe ce que je définis le filename
, il reste index.csv
.
Merci, Max
Avez-vous configuré la vue correctement? – baol
la vue s'affiche comme prévu, si c'est ce que vous voulez dire; le contenu du fichier téléchargé ressemble à celui que je veux – maxenglander