开发者

CSV renders in Safari view but I want it to download a file

开发者 https://www.devze.com 2023-03-17 17:30 出处:网络
I have configured a custom mime type: ActionController::Renderers.add :csv do |csv, options| self.content_type ||= Mime:开发者_StackOverflow:CSV

I have configured a custom mime type:

ActionController::Renderers.add :csv do |csv, options|
  self.content_type ||= Mime:开发者_StackOverflow:CSV
  self.response_body  = csv.respond_to?(:to_csv) ? csv.to_csv : csv
end

and a respond_to block in my controller:

respond_to do |format|
    format.html
    format.csv { render :csv => csv_code}
  end   

Using Firefox and Chrome, the .csv renders to a file which is downloaded. Using Safari the .csv is rendered as a view: How can I change this and force it to download as a file?

See a screen shot of the problem:

CSV renders in Safari view but I want it to download a file


Try

respond_to do |format|
    format.html
    format.csv do
        response.headers['Content-Type'] = 'text/csv'
        response.headers['Content-Disposition'] = 'attachment; filename=thefile.csv'    
        render :csv => csv_code
    end
end 

if this doesn't work, try using

send_file "path/to/file.csv", :disposition => "attachment"


The way I have this working in an old Rails 2 app is using send_data instead of render in the controller. E.g.:

def csv
  ... # build data
  send_data csv_data_as_string, :filename => "#{filename}.csv", :type => 'text/csv'
end
0

精彩评论

暂无评论...
验证码 换一张
取 消