Как залить файл на сотню файлообменников в один клик без посредников
Вам наверняка приходилось расшаривать тяжелый архив, сборку софта или видео сразу на несколько файловых хостингов. Делать это вручную через браузерные вкладки — сущее мучение. Сначала ждешь загрузку на один сервис, потом копируешь ссылку, открываешь второй, получаешь капчу, и так по кругу.
Обычно в таких ситуациях вспоминают веб-мультиаплоадеры вроде Mirrored.to или MultiUp. Но у них свои проблемы: жесткие лимиты на размер файлов для бесплатных пользователей, обязательная регистрация для половины функций, навязчивая реклама и главное — ваши файлы сначала улетают на чужой промежуточный сервер.
Недавно наткнулся на интересный проект PolyUploader. Это открытое десктопное приложение, которое берет файл с вашего диска (или качает по прямой ссылке) и параллельно пушит его сразу на выбранные хостинги прямо с вашего компьютера.
Что умеет PolyUploader
Главная фишка программы простая: вы выбираете файл, отмечаете галочками нужные сервисы и запускаете процесс. Список поддерживаемых хостов впечатляет — в таблице репозитория их 133 штуки. Среди них есть как популярные Gofile, 1fichier, Turbobit, Catbox и Pixeldrain, так и специализированные видеохостинги вроде DoodStream, StreamWish или Voe.
Вот несколько практичных вещей, которые автор заложил в архитектуру:
- Загрузка без аккаунтов. Из 133 хостингов 96 работают в полностью анонимном режиме. Никаких регистраций и логинов, нажал кнопку — получил ссылку.
- Подключение своих API-ключей. Если у вас есть премиум или личный кабинет на 1fichier, KrakenFiles или Nitroflare, можно вбить ключи в настройках. Тогда загрузка пойдет в ваш личный профиль с вашими лимитами.
- Защита ссылок и бандлы. После загрузки приложение собирает полученные ссылки в единый список. Его можно упаковать в одну красивую ссылку или сразу зашифровать через PrivateBin, Cryptgeon, SafeLinking или Filecrypt.
- Профили загрузки. Чтобы каждый раз не кликать по десяткам чекбоксов, наборы хостингов сохраняются в отдельные пресеты под разные задачи.
- Локальная история. PolyUploader запоминает, куда и когда вы заливали файлы, показывает примерный срок жизни ссылки и дает кнопку быстрого удаления, если сам хостинг такое поддерживает.
Скриншоты интерфейса
Как это устроено под капотом
Проект написан на базе Tauri. Пользовательский интерфейс сделан на обычном веб-стеке с Tailwind CSS, а системная логика, работа с сетью и файлами крутится в бэкенде на Rust.
Из-за этого приложение весит немного и расходует минимум оперативной памяти по сравнению с аналогами на Electron.
Самое любопытное инженерное решение здесь связано с ограничениями браузерного движка. Когда веб-интерфейс шлет запросы напрямую к сотне сторонних сайтов, он моментально ловит ошибки CORS и проблемы с межсайтовыми cookie.
Автор обошел эту проблему элегантно. Внутрь Rust-бэкенда встроен локальный HTTP-прокси на базе библиотеки warp-cors. При старте приложения на порту 61337 поднимается легковесный сервер.
// Запуск прокси warp-cors в фоновом рантайме
use tokio::runtime::Builder;
use warp_cors::app::{Config, run};
fn main() {
std::thread::spawn(|| {
let rt = Builder::new_multi_thread()
.enable_all()
.build()
.unwrap();
let cfg = Config { host: "127.0.0.1".into(), port: 61337 };
rt.block_on(run(cfg));
});
}
Фронтенд просто отправляет запросы через локальный адрес:
const proxy = "http://127.0.0.1:61337/";
upload_to_host([
proxy + "https://upload.gofile.io/uploadfile/",
"POST",
sent_data_form
]);
Прокси пересылает трафик на целевой сайт, подменяет нужные заголовки и возвращает ответ интерфейсу. Никаких танцев с браузерными политиками безопасности.
Обратная сторона медали
Автор честно признается в README, что разрабатывает проект в одиночку в свободное от учебы время. А поддержка более чем сотни хостингов в актуальном состоянии — адский труд.
Многие сайты не имеют официального API. Чтобы загрузить на них файл, приходится эмулировать поведение браузера, разбирать скрипты форм и переводить cURL-запросы в код. Как только сервис меняет верстку или защиту, загрузка отваливается до следующего патча.
Кроме того, в приложении пока нельзя закинуть сразу пачку разных локальных файлов для пакетной обработки в очередь. Вы берете один конкретный файл и размножаете его по десяткам зеркал.
В проекте есть анонимная телеметрия. Приложение отправляет на сервер автора только название хоста и дату загрузки для сбора общей статистики, без путей к файлам и без итоговых ссылок. Если вы принципиально против сетевой активности софта, код API тоже открыт на GitHub, логику легко проверить самостоятельно.
Как попробовать в деле
Самый простой путь — заглянуть в раздел Releases репозитория. Там лежат готовые сборки под Windows (установщик), Linux (пакеты AppImage, deb, rpm) и macOS (dmg-образ).
Если хотите собрать бинарник самостоятельно, понадобятся установленный Rust и CLI для Tauri:
git clone https://github.com/spel987/PolyUploader.git
cd PolyUploader
cargo install tauri-cli
cargo tauri build
Готовый установщик появится в директории src-tauri/target/release/bundle.
Кому пригодится
Проект найдет свое место у тех, кто регулярно выкладывает релизы программ, дампы, медиафайлы или бэкапы и хочет иметь надежные зеркала на случай падения основного хранилища.
PolyUploader избавляет от необходимости доверять свои данные сторонним веб-зеркалам и экономит кучу рутинного времени. Если проект вам приглянулся, поставьте автору звезду на GitHub, сольная поддержка такой базы хостов действительно требует колоссального терпения.
