Этот бит выглядит действительно прикольным:
while blk = tmpfile.read(65536)
File.open(File.join(Dir.pwd,"public/uploads", name), "wb") { |f| f.write(tmpfile.read) }
end
Я предполагаю, что вы пытаетесь прочитать свой временный файл по 65536-байтовому блоку за раз, а затем последовательно записать эти блоки в файл назначения. Но вы никогда не пишете blk
, что является первым прочитанным блоком; вместо этого вы пишете остальную часть файла (tempfile.read
). И даже если этот цикл записывал блоки так, как должен, он заново открывает файл для каждого блока, перезаписывая старое содержимое! Во всяком случае, я подозреваю, что вы имели в виду что-то вроде этого:
File.open(File.join(Dir.pwd,"public/uploads", name), "wb") do |f|
while(blk = tempfile.read(65536))
f.write(blk)
end
end
Тем не менее, если у вас есть файл как временный файл (предположительно, уже в вашей локальной файловой системе), возможно, все, что вам нужно сделать, это переместить этот файл ? В этом случае все будет намного быстрее - если источник и место назначения находятся на одном диске, нужно просто поменять местами некоторые указатели файловой системы, а не копировать все эти данные.
Надеюсь, это поможет!