2011-05-23 65 views
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文件,然后在访问该页面的浏览器中触发下载。

我该怎么做?

回答

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' 
+0

最后我用 'SEND_DATA' 而不是 '由send_file' 这一点。我不知道是否有必要,但是因为我有一个数据流而不是文件,所以我不必担心磁盘I/O等。 – jaydel 2011-05-23 16:23:03

+0

这可能是最好的选择。修改后的参考答案 – Yule 2011-05-23 16:26:49

+4

在大多数情况下,您不需要安装FasterCSV。在ruby 1.9.2中,默认的'CSV'是FasterCSV,红宝石1.8.7包含FasterCSV。 – diedthreetimes 2011-05-23 16:31:18