所有, 我试图使用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
我认为无法进行循环工作
答案 0 :(得分:0)
您正在将整个文件读入内存!
使用send_file
使用内存友好的缓冲流。
我还建议在这里使用:x_sendfile,如果适当的模块可用并配置,那么文件可以由前端服务器(Apache,nginx,lighttpd)直接提供。这样可以提供非常高效的下载,并防止慢速客户端阻止rails实例。
阅读“X-Sendfile”标题。 http://tn123.ath.cx/mod_xsendfile/