Видео и субтитры · Загрузчик медиафайлов по прямой ссылке
Как браузер загружает файл по прямой ссылке с помощью fetch и Blob
· Как это работает
загрузки API-интерфейс браузера корс
Проходит по конвейеру, который использует инструмент браузера для преобразования прямой ссылки в сохраненный файл: извлекает байты, сохраняет их как большой двоичный объект и передает их атрибуту загрузки. Объясняет, почему сервер не нужен ни на каком этапе.
Ссылка открывает проигрыватель вместо сохранения файла — нажатие на прямую ссылку MP4 или MP3 обычно воспроизводит его в режиме онлайн, и эту проблему решает загрузчик.
Щелчок по прямой ссылке MP3 может открыть проигрыватель, поскольку браузер знает, как воспроизводить этот тип MIME. Сохранение тех же байтов — отдельное действие. Ключевое слово — прямое: ссылка на реальный файл-ответ, а не на веб-страницу, содержащую проигрыватель или манифест со списком медиасегментов. ToolAcre делает это различие, прежде чем предлагать загрузку, и не выдает себя за страницу URL как файл URL.
Шаг первый: fetch() запрашивает у хоста байты — как выглядит запрос GET к объявленному хосту и что возвращается
После того, как вы выберете «Проверить ссылку», браузер может отправить запрос HEAD к указанному вами URL для проверки статуса, типа и длины. Для извлечения файла используется запрос GET к этому хосту, а не прокси-сервер ToolAcre. В запросе намеренно отсутствуют учетные данные, поэтому хост, требующий вашего входа в систему, может отклонить его. Удаленный сервер также должен разрешить чтение сценариев из разных источников; если CORS блокирует доступ, инструмент объясняет отказ, а не обходит его через скрытое реле. Перенаправление может изменить пункт назначения, поэтому проверьте объявленный хост.
Шаг второй: тело ответа становится Blob — как байты собираются в памяти и почему Blob имеет тип MIME
Тело ответа читается как поток фрагментов байтов. Progress может использовать Content-Length, когда хост предоставляет его; без известной длины инструмент может показывать полученные байты, но не достоверный процент. Он обеспечивает ограничение памяти при сборе фрагментов, а затем собирает Blob с возвращаемым типом контента. Это безопаснее, чем вызов response.blob() для неограниченного потока, но это не потоковая передача с нулевой памятью на диск: завершенный Blob по-прежнему занимает место в сеансе вашего браузера.
Шаг третий: URL.createObjectURL и атрибут загрузки — как временный объект: URL плюс привязка запускает диалоговое окно сохранения.
Blob — это данные в памяти, а не интернет-адрес. Браузер может создать временный объект URL и прикрепить его к привязке с именем загружаемого файла; щелчок по этому якорю запрашивает браузер сохранить байты. Имя файла может быть взято из заголовка Content-Disposition или пути URL, а не из заголовка страницы. Поскольку ссылка теперь представляет собой BLOB-объект той же страницы URL, браузер может сохранить результат, не размещая его на ToolAcre. По-прежнему имеет смысл проверить расширение и тип MIME перед открытием файла из незнакомого источника.
Рабочий пример: сохранение эпизода подкаста по ссылке на вложение — после одного MP3 из вставленного URL в файл на диске.
Представьте себе, что издатель подкаста раскрывает авторизованный вложенный файл URL, заканчивающийся на эпизод.mp3. Вставьте этот точный адрес, проверьте объявленный хост и используйте ссылку «Проверить». Если HEAD разрешено, оно может отображать audio/mpeg и ожидаемое количество байтов; Затем Fetch запрашивает у издателя MP3 байты, передает их в Blob и сохраняет эпизод.mp3. Если хост опускает заголовки CORS, браузер может воспроизводить ссылку на своей вкладке, в то время как эта страница не может получить ее с помощью сценария; Тогда «Сохранить ссылку как» может быть правильным маршрутом. Право пользователя на сохранение файла не зависит от того, позволяет ли его сервер технически получить его.
Очистка: отзыв объекта URL и освобождение памяти — почему грамотно построенный загрузчик освобождает Blob после завершения сохранения
URL-адреса временных объектов хранят ссылки на их резервные объекты Blob. Загрузчик, который оставляет в живых все URL, может сохранять большие файлы на долгоживущей вкладке. Утилита общей загрузки ToolAcre создает локальный URL для действия сохранения и отменяет его по завершении; отмена освобождает средство чтения ответов и отбрасывает частичные фрагменты. Для очень больших файлов лучше подойдет обычная загрузка браузером с хоста, чем сбор всего ответа в страничной памяти.
Что здесь не распространяется — URL-адреса страниц, манифесты потоковой передачи, DRM и ссылки, требующие входа в систему.
Этот инструмент не сможет найти медиафайлы, скрытые за страницей видео, проанализировать манифесты HLS/DASH .m3u8 или .mpd, обойти DRM, подделать заголовки или получить доступ к потоку, защищенному сеансом. Он не загружает для вас личный контент и не решает, дает ли лицензия разрешение на копирование файла. 403, перенаправление на страницу входа или ошибка CORS — это граница, которую нужно понять, а не сигнал для поиска недокументированного прокси.
Вывод: три API-интерфейса браузера, отсутствие сервера — как Direct Media Downloader применяет этот конвейер к вставляемой вами ссылке.
Конвейер извлекается с предоставленного хоста → получает фрагменты → создает Blob → запускает локальную загрузку. Реле ToolAcre не задействовано, но реальный запрос к стороннему хосту абсолютно необходим; его журналы могут видеть соединение. Direct Media Downloader объявляет об этом контакте перед его выполнением и сообщает вам, когда правила безопасности браузера запрещают чтение из разных источников.