我在控制器中有一个功能,它接受一些规范并生成一个报告.在视图中调用此函数user_report:
<%= submit_to_remote'submit-button',"将报告导出到Excel",:url => {:controller =>:reports,:action =>:user_report,:print_state =>'print'}%>
在reports_controller中,我使用Spreadsheet插件在user_report函数中生成Excel文件.我想使用send_data将文件流式传输给用户,而不是先在服务器上创建它.我所做的研究表明,使用StringIO是可行的方法,如下所示.令人沮丧的是,当我调用send_data时没有任何反应.该插件似乎可以很好地创建一个文件并将其保存在服务器上,但在使用send_file时什么也不做,这表明问题不在于插件.但是我对send_file/send_data做错了什么?
该函数本身如下所示:
def user_report
if request.post?
unless params[:reports][:userid].blank?
@userid=params[:reports][:userid]
end
if params[:print_state]=='print'
report = Spreadsheet::Workbook.new
info = report.create_worksheet :name => 'User Information'
info.row(1).push 'User ID', @userid
@outfile = "Report_for_#{@userid}.xls"
require 'stringio'
data = StringIO.new ''
report.write data
send_data data.string, :type=>"application/excel", :disposition=>'attachment', :filename => @outfile
end
respond_to do |format|
format.js { }
end
end
Run Code Online (Sandbox Code Playgroud)
结束
日志文件读取2010-10-18 14:13:59 INFO - 发送数据Report_for_jjohnson.xls但没有在浏览器中开始下载.我之前在这个应用程序上成功使用了send_data,这令人困惑.
我在spreadsheet.rubyforge.org上使用Rails v2.3,Ruby v1.8.7和Spreadsheet v6.4.1.