我一直在使用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)时,下载实际开始需要大约一分钟。 我已经四处寻找这个问题的解决方案,但没有提出任何建议,感谢任何帮助!
答案 0 :(得分:1)
Webbrick不支持x_sendfile
。因此,它必须将文件完全加载到内存中,然后在开始响应之前将其拆分为块(IMO默认为4K)。此外,它在执行此操作时会阻止整个Web服务器。这并不奇怪,这很慢。
我建议使用支持x_sendfile
的网络服务器,例如带乘客的apache。
BTW直接从用户输入生成路径可能是一个安全漏洞。猜猜当有人进入database.yml
params[:title]
和params[:name]
的路径时会发生什么......