require 'rubygems'
require 'sinatra'
require 'ftools'
put '/upload' do
tempfile = params['file'][:tempfile]
filename = params['file'][:filename]
File.mv(tempfile.path,File.join(File.expand_path(File.dirname(File.dirname(__FILE__))),"public","#{filename}"))
redirect '/'
end
Таким образом, вам не нужно беспокоиться о размере файла, поскольку он не открыт (не прочитан) в памяти, а просто перемещен из временного каталога в нужное место, пропуская важный блокировщик. Фактически, код php делает то же самое, читает файл в 1k кусках и сохраняет в новом файле, но так как файл тот же самый, его бессмысленно.
Чтобы попробовать вы можете следовать ответу Бена.