Как скачивать большие файлы через браузер

Обновлено: 07.07.2024

Однажды в очередной раз возникла задача о закачке относительно больших файлов. Говоря конкретно, клиент захотел заливать на сайт через админку видеоролики размером 20-40 мегабайт. Казалось бы, в наше просвещенное время подобный размер — это такая мелочь, о коей и говорить стыдно. Но внезапно все уперлось в настройки виртуального хостинга. Мы с ужасом обнаружили, что максимальный размер закачиваемого файла — 2M, и поменять эту цифру нет возможности. И менять хостинг по ряду причин нельзя — по крайней мере не сейчас.


Самая первая наша реакция — посмотреть возможности различных флеш-аплоадеров. Ведь не может быть, чтобы мировая техническая мысль не реализовала такой полезной вещи, как загрузка файла по частям. Перебираем последовательно Uploadify, SWFUpload, FancyUpload, jqUploader, jquery-transmit. Но все тщетно. Искомой фичи мы не видим. Вполне вероятно, что надо копать дальше, но время поджимает, и надо уже что-то делать…

Вышеописанное печально. Однако нам на руку играет тот факт, что это админка. Т.е. нам вовсе не нужно ориентироваться на кроссбраузерность. Достаточно того, что этот механизм будет работать на браузере клиента, каковым (о чудо!) является FF.

Тут же вспоминаем, что в FF последних версий есть возможность получить в строку содержимое файла, загруженного в поле file-upload. И в голову приходит желание разбивать эту строку на куски и закачивать частями, используя Ajax.

Клиентская часть

Сначала нарисуем необходимое в статическом HTML:

Теперь нам надо написать ту самую функцию big_file_upload:

Получение содержимого файла

Для получения содержимого файла будем использовать следующую конструкцию:

  • file.get(0) — получение DOM-объекта из jQuery-объекта, переданного в функцию
  • files.item(0) — получение первого файла из списка. Здесь он у нас единственный, однако напомню, что уже есть возможность множественной закачки файлов из одного контрола.
  • getAsDataURL() — получение содержимого файла в формате Data:URL. Есть еще методы getAsText и getAsBinary, однако нам нужно передавать на сервер методом POST, поэтому желательно получить содержимое файла, закодированное в Base64.

Поскольку содержимое у нас в формате Data:URL, то неплохо было бы отрезать заголовочную часть, в которой находится информация о MIME-типе и способе кодирования. В более общем варианте нашей функции эту информацию надо бы использовать, но в данном примере она нам только будет мешаться при декодировании. Поэтому просто отрежем все по первую запятую (включительно), которой отделяется заголовок:

Отправка файла кусками

Здесь все банально:

Серверная часть

Теперь сделаем на сервере принимающий PHP-скрипт upload.php. В варианте для примера он также предельно прост:

Файл открывается с опцией «а», т.е. предлагается не перезаписывать существующий файл, а дополнять его. Таким способом мы из кусков соберем целый файл.

Думаю, всем понятно, что данный скрипт должен лежать в закрытой админской части сайта чтобы к нему не имели доступа разные личности со стороны. Кроме того, имя файла и сам файл должны проверяться на валидность. Иначе — это даже не уязвимость, а… я и слова-то такого не знаю…

Пробуем запустить

Попробовали? Получилось? Держу пари, что получилось совсем не то, что ожидалось. Файл вроде бы закачался. Вроде бы даже длина правильная. А вот содержимое — какая-то каша.

Почему так получилось? Ответ прост: POST-запросы отправляются в асинхронном режиме по нескольку кусков одновременно, поэтому никто не гарантирует, что на сервер они будут приходить именно в той последовательности, в которой были поданы команды на отправку. Мало того, что никто не гарантирует, а я прямо-таки утверждаю, что никогда они не придут в нужной последовательности. Всегда будет получаться каша.

Поэтому, как это ни грустно, придется асинхронность отключить. Перед оправкой файла выполним следующее:

Теперь все нормально. Файл собирается в нужной последовательности, однако на время закачки исполнение прочих скриптов приостанавливается. Поэтому, чтобы не нервировать пользователя, было бы неплохо где-нибудь показывать процентики или прогресс-бар. Таким образом, работоспособный скрипт выглядит следующим образом:

Думаю, каждый из нас, хотя бы раз сталкивался с ситуацией, когда не удалось скачать из интернета большой файл. Например, нашли в интернете нужный вам обучающий курс или какой-нибудь фильм, нажали на ссылку «скачать» и загрузка началась.

А потом, вдруг, кратковременный обрыв связи или свет дома мигнул и все. Браузер показывает сбой загрузки и не хочет ее возобновлять, предлагает лишь начать заново. Хорошо, если скачивание только началось, но бывает так, что до завершения остаются считанные проценты. Обидно.

Еще хуже, если файл скачался, но отказывается работать, так как при загрузке он был поврежден.

Избавиться от такого рода трудностей не сложно, но необходимо знать как. А существуют для этого специальные программы, которые позволяют контролировать весь ход закачки файла, возобновлять ее при сбоях и следить за целостностью файлов.

В этой статье я расскажу о том, как пользоваться программой Download Master, которая, как раз, помогает скачивать файлы из интернета.

Пользоваться этой программой несложно, давайте я по шагам расскажу что и как делать.

Установка программы

Скачаете файл dmaster.exe, нужно будет его запустить, согласиться с лицензионным соглашением и закончить установку программы.

Ручное скачивание файлов

После установки нужно будет запустить программу, откроется окно, состоящее из трех блоков.

С левой стороны окна располагаются категории скачиваемых данных, они служат для облегчения навигации, чтобы вы могли легко сортировать и находить то, что скачали.

Вверху находится главная панель управления.

В центре окно со списком загрузок.

Для того, чтобы начать закачку файла вам нужно в верхней панели нажать кнопку «добавить» (на ней нарисован знак плюса). В открывшемся окне вставить ссылку на файл, который нужно скачать и нажать кнопку «начать закачку»

Автоматическое скачивание файлов

Download Master позволяет скачивать файлы очень просто, не используя ручной режим, с помощью специального плагина. В статье «Как установить плагин для браузера?» написано, как добавлять новые функции к веб обозревателю, так вот DM автоматически устанавливает свое дополнение к браузеру при установке.

Благодаря этому плагину для скачивания не нужно открывать окно программы. Вам нужно сделать следующее:

1. Открыть сайт в интернете, на котором стоит ссылка для скачивания

2. Кликнуть правой кнопкой мыши по ссылке и выбрать «копировать ссылку»

3. Окно для скачивания откроется автоматически. В нем уже будет подставлена ссылка на скачивания и вам останется только нажать «начать закачку».

Когда вы скачиваете действительно большие файлы в Chrome или другом браузере, то можете заметить, насколько это долгий процесс. Предположим, вы поставили на загрузку ISO-файл Windows 10 с официального сайта Microsoft, и скорость колеблется в районе 600 Кб/с, хотя у вас интернет в 50 Мбит/с. В такой ситуации не стоит звонить провайдеру и обвинять его в том, что тот урезает скорость.

Дело в том, что большинство современных браузеров — Chrome, Firefox, Safari и так далее — скачивают файлы в один поток, не задействовав ваш канал целиком. Это совершенно незаметно, когда качаете мелкие картинки или приложения, но попробуйте-ка так загрузить 4 ГБ.

К счастью, скорость загрузки можно увеличить несколькими способами.

1. Chrome, Opera и «Яндекс.Браузер»

В Chrome есть опция Parallel downloading в скрытых настройках. Включите её, и браузер начнёт скачивать файлы в несколько потоков.

Аналогичная опция есть и в других основанных на Chrome веб-обозревателях, например в Opera и «Яндекс.Браузере».

2. Firefox

В Firefox вам понадобится расширение Multithreaded Download Manager. Установите его, затем нажмите на значок в панели инструментов, щёлкните плюсик и добавьте URL, которых хотите скачать.


3. uGet и Progressive Downloader

Менеджеры загрузок в браузерах тоже постоянно испытывают проблемы с закачкой очень больших файлов. Альтернатива — использовать специализированную программу.

Один из вариантов — uGet. Это бесплатный менеджер закачек с открытым исходным кодом. Он умеет как перехватывать ссылки из браузеров, так и загружать файлы по требованию.

Количество потоков настраивается в параметрах загрузки uGet. Для этого надо при добавлении закачки указать нужное число потоков в пункте Max Connections.

uGet работает в Windows, Linux и Android.

Если вы предпочитаете macOS — установите Progressive Downloader, бесплатную альтернативу uGet. Нажмите Progressive Downloader → «Настройки» → «Задача» и введите необходимое количество потоков.

Современные интернет-пользователи постоянно сталкиваются с проблемой, когда при скачивании из сети файлов большого объема значительно падает скорость загрузки и нередко происходит сбой соединения, не оставляя возможности сохранить файл. При этом многие пользователи по разным причинам не желают устанавливать торрент-клиенты и менеджеры загрузки, которые в свою очередь обеспечивают быстрое и бесперебойное скачивание файлов. К счастью, существует способ, который позволяет увеличить скорость загрузки файлов в веб-обозревателе без применения сторонних утилит.

Выбор браузера

Разработчики веб-браузеров намеренно устанавливают такое ограничение для интернет-соединения при больших загрузках, чтобы часть канала оставалась свободной для других процессов и программ, запущенных на устройстве.

Однако данное ограничение можно отключить вручную в Google Chrome, Яндекс.Браузере и Opera. Речь идет о так называемой функции параллельной загрузки, которая поможет отменить установленное ограничение, а также обеспечит быстрое и стабильное многопоточное скачивание во многих браузерах, работающих на движке Chromium. Она позволит вам сохранять большие файлы на высокой скорости без необходимости использования специальных программ для скачивания или плагинов.

Как увеличить скорость загрузки в Google Chrome

Сначала необходимо открыть скрытые настройки обозревателя (меню экспериментальных функций). Для этого запустите браузер Google Chrome и в адресной строке введите команду:

chrome://flags или chrome://experiments


Далее в представленном списке предстоит найти нужную опцию. В поисковой строке введите наименование функции Parallel Downloading и установите значение Enabled.




Попробуйте скачать большой файл и протестируйте скорость скачивания.

Как увеличить скорость загрузки в Opera

В другом популярном браузере Opera функция параллельной загрузки активируется аналогичным образом через меню скрытых настроек.

Введите в адресной строке opera://flags/ или opera://experiments, найдите и включите функцию параллельной загрузки, а затем перезапустите обозреватель, нажав на кнопку Relaunch.


Как увеличить скорость загрузки файлов в Яндекс.Браузере

Для Яндекс.Браузера также подходит способ включения функции параллельной загрузки.

Только в данном случае для вызова меню скрытых настроек в адресной строке необходимо ввести browser://flags.


Затем укажите Parallel downloading в поисковой строке, поменяйте значение на Enabled и перезапустите браузер.

Читайте также: