Как раздавать файлы на пять гигабайт
Google Диск отдаёт заглушку вместо файла, браузер не тянет загрузку через панель, а трафик кто-то оплачивает.
На сайте нужно было выложить два образа Windows — пять и семь гигабайт. Кнопка «Скачать», человек нажимает, файл идёт. Задача, которая кажется решённой ещё в девяностых.
Сначала ссылки вели на Google Диск. Выглядело это разумно: файлы уже лежат там, ссылка вида drive.google.com/uc?export=download&id=... отдаёт файл напрямую. Работает.
Работает — на файлах примерно до ста мегабайт.
Что происходит с большими файлами
Google проверяет содержимое на вирусы перед отдачей. Для крупных файлов проверка не выполняется, и вместо файла сервис возвращает HTML-страницу с предупреждением и кнопкой подтверждения.
То есть человек нажимает «Скачать» на вашем сайте — и попадает на промежуточную страницу Google, где надо нажать ещё раз. Половина уйдёт, решив, что ссылка битая.
В сети есть обходные приёмы — добавить в адрес параметр подтверждения. Они периодически работают и так же периодически перестают, потому что Google их закрывает. Строить на этом раздачу нельзя: сегодня всё хорошо, завтра у вас поток жалоб, о котором вы узнаёте последним.
Вторая проблема, менее очевидная
У Google Диска есть суточная квота на исходящий трафик. Файл на семь гигабайт исчерпает её за десяток скачиваний, после чего ссылка выдаёт «превышен лимит» — всем и до конца суток.
Облачное хранилище для документов и файловый хостинг — разные сервисы. Google Диск отлично справляется с первым и не предназначен для второго.
Прямые ссылки Microsoft
Раз образы официальные, логично отдавать их прямо с серверов Microsoft. Такие адреса существуют — вида software.download.prss.microsoft.com/..., именно их выдаёт официальная страница загрузки.
Я предположил, что их можно вшить в сайт и обновлять раз в квартал. Проверил — и оказался неправ.
Ссылки живут около суток. Каждая содержит токен с ограниченным сроком действия; страница Microsoft генерирует его при каждом обращении. Вшить такой адрес в сайт нельзя — завтра он мёртв.
Обойти можно, обращаясь к тому же внутреннему API, что и страница Microsoft, и перенаправляя посетителя на свежую ссылку. Но API недокументированный, ломается без предупреждения, а все запросы пойдут с одного адреса вашего сервера и упрутся в ограничения. Ненадёжно.
Своё хранилище
В итоге я взял объектное хранилище у того же хостинга, где стоит сайт. Это тип сервиса, специально сделанный для раздачи файлов: прямая ссылка, никаких промежуточных страниц, никаких суточных лимитов.
Настройка заняла минут пять. Важных момента два:
- Тип доступа — публичный. При приватном ссылки требуют подписи, и с сайта скачать не выйдет.
- Объём с запасом. Двенадцать гигабайт образов не влезут в тариф на десять, а автоматический переход на следующий вы заметите только в счёте.
Загрузить через браузер не получится
Первая же попытка залить файл через панель управления упёрлась в ограничение: максимум пятьсот двадцать мегабайт. Это не предел хранилища, а предел веб-интерфейса — браузер плохо тянет многогигабайтные загрузки.
Нужна отдельная программа. Для macOS подошёл Cyberduck: бесплатный, с обычным окном, куда файлы просто перетаскиваются. У хостинга нашёлся готовый файл настроек — скачиваешь, открываешь, подключение появляется само, вводить ничего не надо.
Двенадцать гигабайт ушли примерно за десять минут. Программа сама разбивает большие файлы на части, ограничения из панели там нет.
Контрольные суммы
Ссылки заработали, но остался вопрос, который стоит задать себе, а не ждать от посетителей.
Человек скачивает с незнакомого домена шесть гигабайт и ставит с них операционную систему. Проверить, что это действительно оригинальный образ, а не что-то изменённое, он никак не может. Ему остаётся только верить вам на слово.
Решается это контрольной суммой. Считаете её у себя:
shasum -a 256 Win11_25H2_Russian_x64.iso
Получаете строку из шестидесяти четырёх символов и публикуете рядом с кнопкой. Посетитель после загрузки считает сумму у себя:
certutil -hashfile Win11_25H2_Russian_x64.iso SHA256
Совпало — файл в точности такой же, как у вас. Изменись хоть один байт, сумма стала бы совершенно другой.
Заодно это ловит повреждения при скачивании. Многогигабайтный файл иногда приходит битым, установка падает на середине с невнятной ошибкой, и человек не понимает почему. Сверка суммы отвечает за минуту.
Все крупные проекты, раздающие образы систем, публикуют контрольные суммы. Это не паранойя, а признак того, что раздающему нечего скрывать.
Про деньги
Момент, который легко упустить при выборе хранилища: тариф обычно называет цену за хранение, а основной расход — трафик.
Хранить двенадцать гигабайт стоит копейки. А вот каждое скачивание — это шесть гигабайт исходящего трафика с вашего счёта. Двадцать человек в месяц дают сто двадцать гигабайт.
Посчитайте это заранее. Если посетителей десятки — расход приемлемый. Если тысячи — единственное разумное решение отправлять людей к первоисточнику, даже ценой лишнего клика.
Что из этого следует
Гигабайты трафика кто-то оплачивает. Всегда. Бесплатных вариантов не существует — бывают такие, где вы пока не превысили чужой лимит.
Google Диск, файлообменники, любые сервисы «просто положи файл» рассчитаны на другое использование. Пока файлы небольшие, они справляются. На гигабайтах начинаются заглушки, квоты и ограничения, о которых вы узнаёте от пользователей.
Если раздаёте что-то тяжёлое — берите сервис, который для этого сделан, и считайте трафик до, а не после.