ruby on rails send_file延迟大文件

时间:2014-05-11 21:07:18

标签: ruby-on-rails ruby file delay send

我一直在使用rails服务器,当我在其他地方时,我可以使用它来访问存储在我公寓中的驱动器上的文件。为了处理下载,我编写了以下控制器:

class DownloadController < ApplicationController
  def index
    @title = params[:title]
    @name = params[:name]
    @path = '/media/video/'+@title+'/'+@name
    call_to_download(@path)
  end

  def call_to_download(path)
    send_file( path, :x_sendfile=>true )
  end
end

这对于像图像这样的小文件非常有用但是当我尝试下载视频片段(大约500 MB)时,下载实际开始需要大约一分钟。 我已经四处寻找这个问题的解决方案,但没有提出任何建议,感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

Webbrick不支持x_sendfile。因此,它必须将文件完全加载到内存中,然后在开始响应之前将其拆分为块(IMO默认为4K)。此外,它在执行此操作时会阻止整个Web服务器。这并不奇怪,这很慢。

我建议使用支持x_sendfile的网络服务器,例如带乘客的apache。

BTW直接从用户输入生成路径可能是一个安全漏洞。猜猜当有人进入database.yml params[:title]params[:name]的路径时会发生什么......