Рыская по документации к методу open из набора OpenURI (мне нужно было установить большее значение timeout’а). Пролистав нужное место в документации натолкнулся на интересные параметры, с которыми можно вызывать метод open.
:content_length_proc => lambda {|content_length| ... }
– если данный proc установлен, то в него передается Content-Length или nil, если данный параметр недоступен. В этот момент мы уже знаем полный размер файлы и можем нарисовать красивый ProgressBar.:progress_proc => lambda {|size| ...}
– данный proc вызывается с одним параметром (размер скаченного фрагмента в байтах), когда метод open получает очередной фрагмент из сети.:read_timeout=>10
– это тот параметр, из-за которого я и полез в документацию, устанавливает таймаут на чтение для http соединения.
А теперь небольшой пример использования данных знаний. Нам понадобится большой файл, я взял трехмегабайтный файл и положил его в Dropbox/Public, чтобы легко было получить на него ссылку. Также понадобится установленный gem ruby-progressbar.
Вот и все, работающий пример готов.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|