в рельсах, невозможно переопределить имя файла размещения содержимого

Я использую Rails 3.1.0.rc8 и Chromium 15.0.874.102.

Я хочу указать имя файла для загрузки в формате CSV. Я следую этому решению SO , но не могу изменить имя файла заголовка Content-Disposition .

Вот мой код:

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    

И в моем контроллере:

respond_to do |format|
  format.html
  format.csv do
    render_csv(:basename => "my_filename")
    Rails.logger.debug "HEADERS: #{headers.to_s}"
  end
end  

В моем журнале:

[2011-11-28 12:25:49.611] DEBUG - HEADERS: {"Content-Type"=>"text/csv", "Content-Disposition"=>"attachment; filename=my_filename.csv"}

В инструменте проверки сети Chromium я вижу следующее в заголовках ответов:

Content-Type: text/plain
Content-Disposition: attachment; filename=index.csv

Если я изменю ] Content-Type на что-то вроде foo / bar , я вижу, что изменение происходит в моем инструменте инспектора сети. Независимо от того, что я установил для filename , он останется index.csv .

Спасибо, Макс

7
задан Community 23 May 2017 в 12:32
поделиться