在Ruby on Rails中创建可下载文件

11

访问该页面

localhost:3000/download_me

调用控制器 foo 中的 download_me 控制器动作。

class foo < ApplicationController
  def download_me
    # a file is created here i.e. temp.csv in directory C:\
  end
end

控制器将创建一个临时的csv文件,然后触发在访问页面的浏览器中下载。

我该如何做到这一点?

1个回答

15

你是否有必要将临时文件存储在服务器上?如果是,可以使用以下代码(需要安装fastercsv):

require 'fastercsv'
FILE_PATH= "root/to/tmpfile.csv"

FasterCSV.open(FILE_PATH, "w") do |csv|
    csv << 'add some data'
end

send_file file_path, :type=>'text/csv'

我建议你可能不需要存储该文件,因此只需将FasterCSV.open行替换为:

csv = FasterCSV.generate do |csv|

然后将CSV作为响应输出:

send_data csv, :type=> 'text/csv'

我最终使用了“send_data”而不是“send_file”。我不知道是否有必要,但因为我有一个数据流而不是文件,所以我不必处理磁盘I/O等问题。 - user483040
这可能是最好的做法。为了以后参考,修改了答案。 - Yule
4
大多数情况下您无需安装FasterCSV。在Ruby 1.9.2中,默认的“CSV”已经是FasterCSV,在Ruby 1.8.7中,FasterCSV已经包含在内。 - diedthreetimes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接