【发布时间】:2012-11-01 09:07:43
【问题描述】:
我想知道是否可以在 Rails 中做到这一点:
在网页上有一个链接。当用户单击链接时,控制器会动态生成一个文件(例如,一个包含 1 到 10 之间的单个随机数的文本文件),并将该文件下载到用户的计算机上。该文件可能暂时存储在服务器上,但不应永久存在。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 file download
我想知道是否可以在 Rails 中做到这一点:
在网页上有一个链接。当用户单击链接时,控制器会动态生成一个文件(例如,一个包含 1 到 10 之间的单个随机数的文本文件),并将该文件下载到用户的计算机上。该文件可能暂时存储在服务器上,但不应永久存在。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 file download
在控制器中使用send_data:
send_data("4", :filename => "my_awesome_file")
如果服务器上已经有文件,可以改用send_file
send_file(filepath, :filename => "my_awesome_file")
http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_data
【讨论】:
是的,这是可能的。这是我的一个应用程序中的内容:
class DownloadsController < ApplicationController
def download
# ...
send_file CSVConstructor::Constructor.new(...).to_zip
end
end
download 操作从表单提交参数并将它们发送到自定义类,该类生成一些文件,将它们打包为 zip,并返回文件路径。您必须找出为您自己的应用程序生成文件的最佳方法,但我会推荐类似的方法 - 将功能分支到一个单独的类中有助于保持控制器的轻便。
【讨论】: