将csv文件下载到计算机

时间:2013-07-02 14:46:58

标签: ruby-on-rails csv download export

从ajax我在我的控制器中调用我的导出动作

def export

    data_filtered = eval(params[:data_filtered][9..-2])
    CSV.open("data.csv", "wb") do |csv|
        csv << data_filtered.first.keys
        data_filtered.each do |hash|
            csv << hash.values
        end
     end
 end

目前这确实在我的计算机上创建了一个名为data.csv的文件,但它没有显示任何实际上这样做的证据。我希望浏览器下载该文件,并显示在浏览器下载和我的下载文件夹中。

编辑:

def export
  data_filtered = eval(params[:data_filtered][9..-2])

  csv_file = CSV.generate({}) do |csv|
  csv << data_filtered.first.keys
  data_filtered.each do |hash|
    csv << hash.values
  end
end
send_data csv_file, :type => 'text/csv; charset=iso-8859-1; header=present', :disposition => "attachment; filename=tester1.csv"

2 个答案:

答案 0 :(得分:0)

您需要设置标头以指示浏览器应对结果文件执行的操作。

send_data file, :type => 'text/csv; charset=iso-8859-1; header=present', :disposition => "attachment;data=#{csv_file}.csv"

但是,必须先将其写入服务器,然后再下载。您可能会发现此答案有用:Ruby 1.9.2 export a CSV string without generating a file

答案 1 :(得分:0)

好吧,您似乎没有从控制器方法发回任何响应,这就是为什么浏览器中没有发生任何事情。您只是在处理CSV。

要向可下载实体发回响应,一种方法是使用send_datasend_file,具体取决于您拥有数据的格式(二进制文件与文件)。

两者基本上都是相同的 - 允许您指定数据,数据类型和您指定的可下载文件名。它可以作为响应返回,就像渲染调用一样。

希望有所帮助!