开发者

How to handle csv download prompt through a post request in Rails

开发者 https://www.devze.com 2023-04-09 13:00 出处:网络
I have a servlet (java) returning a csv file. So in my controller I send a post request, def handleCsvRequest

I have a servlet (java) returning a csv file. So in my controller I send a post request,

def handleCsvRequest

response = RestClient.post theUrlPathTotheServlet queryParams

end

Now how do I handle the response so that it prompts the user to download this csv file. I know you can do this via a form and hidden Iframe but i'd like to do it through rails. I am looking through fastercsv but i am not finding great examples. Many thanks.

I have tried the following:

i have tried the following

 csv_string = RestClient.post url, json, :content_type => :json
 csv_file = CSV.generate do |csv|
   csv << [csv_string]
 end

 send_data csv_file,  :type => 'text/csv; charset=iso-8859-1; 开发者_开发问答header=present', :disposition => "attachment; filename=report.csv"

but i don't get prompt for a file download? any ideas?


Do have a look at

1> http://fastercsv.rubyforge.org/ - For Documenation

2> http://supriya-surve.blogspot.com/2010/02/using-fastercsv-to-import-data.html - As an e.g.


Use send_file or send_data to send the csv data back to the browser.

A typical example of send_data is something along the lines:

csv_data = CSV.generate do
  # block to generate CSV text
end

send_data csv_data, :filename => 'your_data.csv'

A typical example of send_file is

@csv_filename ="#{RAILS_ROOT}/tmp/your_data.csv"
send_file @csv_filename, :filename => "your_data.csv"

This should work in development. If this does not work in production, and you are using an Apache server, you have to comment out the following line in config/environments/production.rb

config.action_dispatch.x_sendfile_header = "X-Sendfile"

Hope this helps.

0

精彩评论

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

关注公众号