Estoy usando Rails 3.1.0.rc8 y Chromium 15.0.874.102.en rieles, no se puede sobrescribir el nombre de archivo de disposición de contenido
Quiero establecer el nombre de archivo de una descarga CSV. Estoy siguiendo este SO solution, pero no puedo modificar el filename
del encabezado Content-Disposition
.
Aquí está mi código:
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
Y en mi controlador:
respond_to do |format|
format.html
format.csv do
render_csv(:basename => "my_filename")
Rails.logger.debug "HEADERS: #{headers.to_s}"
end
end
En mi registro:
[2011-11-28 12:25:49.611] DEBUG - HEADERS: {"Content-Type"=>"text/csv", "Content-Disposition"=>"attachment; filename=my_filename.csv"}
En cromo herramienta inspector de la red, veo lo siguiente en mis encabezados de respuesta:
Content-Type: text/plain
Content-Disposition: attachment; filename=index.csv
Si cambio el Content-Type
a algo así como foo/bar
, veo el cambio en mi herramienta de inspector de red. No importa a qué establezca el filename
, sigue siendo index.csv
.
Gracias, Max
¿Tiene la vista correctamente configurada? – baol
la vista se visualiza como se espera, si eso es lo que quiere decir; el contenido del archivo descargado parece que quiero – maxenglander