如何通过Rails中的post请求处理csv下载提示

时间:2011-09-29 12:36:12

标签: ruby-on-rails csv

我有一个servlet(java)返回一个csv文件。所以在我的控制器中我发送了一个帖子请求,

def handleCsvRequest

response = RestClient.post theUrlPathTotheServlet queryParams

现在我如何处理响应,以便提示用户下载此csv文件。我知道你可以通过表格和隐藏的Iframe来做到这一点,但我想通过rails来做到这一点。我正在通过fastercsv,但我找不到很好的例子。非常感谢。

我尝试了以下内容:

我试过以下

 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"

但我没有得到文件下载的提示?任何想法?

2 个答案:

答案 0 :(得分:1)

使用send_file或send_data将csv数据发送回浏览器。

send_data的一个典型例子是:

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

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

send_file的典型示例是

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

这应该在开发中起作用。如果这在生产中不起作用,并且您正在使用Apache服务器, 你必须在config / environments / production.rb中注释掉以下行

config.action_dispatch.x_sendfile_header = "X-Sendfile"

希望这有帮助。

答案 1 :(得分:1)