在rails中下载大文件时无法分配内存

时间:2010-09-16 05:57:47

标签: ruby-on-rails

所有,          我试图使用send_data函数在rails中下载大文件,但是     获取错误:failes分配内存,当尝试以块的形式下载时,只获取块大小的文件,下面是我的代码..

File.open(@containerformat.location,"rb"){|f| @data = f.read(8888)}
ext = File.extname(@containerformat.streamName)

if ext == '' 
  extension = File.extname(@containerformat.location)
  send_data(@data,:filename => @containerformat.name+extension,
  :disposition => 'attachment')
else   
  send_data(@data,:filename => @containerformat.streamName,
  :disposition => 'attachment')
end

我认为无法进行循环工作

1 个答案:

答案 0 :(得分:0)

您正在将整个文件读入内存! 使用send_file使用内存友好的缓冲流。

我还建议在这里使用:x_sendfile,如果适当的模块可用并配置,那么文件可以由前端服务器(Apache,nginx,lighttpd)直接提供。这样可以提供非常高效的下载,并防止慢速客户端阻止rails实例。

阅读“X-Sendfile”标题。 http://tn123.ath.cx/mod_xsendfile/