Предназначена в основном для программистов 1С, для использования в своих целях, хотя и конечные пользователи могут использовать эту демонстрационную обработку для получения одного или нескольких файлов из архива, содержащего сотни, а то и тысячи файлов без необходимости укачивать весь архив. Работает только с WEB ресурсами, поддерживающими скачивание частей файлов (заголовок "Range"). Результатом работы обработки является ZIP архив, содержащий выбранный для закачки файл.
Программная часть состоит из 2 основных частей:
Первая получает структуру архива состоящую из "central directory structure" (каталог архива) и "end of central directory record" (конечная запись архива), а для архивов формата ZIP 64 (именно их гигантский объем и делает привлекательным скачивание отдельных файлов) добавляются "zip64 end of central directory locator", "zip64 end of central directory record" и поля переменной длины "extra field". Получение всей этой информации в целом не составляет проблем, так как практически все структуры имеют указатель на начало и размер, кроме самой первой - "end of central directory record". Эта запись минимальным размером 22 байта может теоретически расширятся до 64000 байт (за счет комментария архива) и расположен в конце архива, т.е. для поиска начала этой структуры необходимо сканировать файл начиная с конца в обратном направлении и искать сигнатуру начала структуры. Результатом работы первой части является каталог архива (массив структур) и буфера двоичных данных, содержащих структуры для записи файла в локальной файловой системе.
Вторая часть скачивает часть архива, содержащую выбранный для загрузки файл. Загрузка тела файла производится прямо на локальный диск для минимизации расхода оперативной памяти. Затем к полученному файлу присоединяются модифицированные структуры архива. В результате в локальной файловой системе получается полноценный ZIP архив, содержащий только один загруженный файл.
Обработка тестировалась на больших архивах (ГАР ФИАС, объемом 35 гигабайт и содержащим более 1700 файлов), малых архивах (без использования спецификаций ZIP64), а также архивах с запароленными файлами (в этом случае пароль надо будет указывать при разархивации полученного локального файла). Архивы с паролем, установленным на каталог файлов архива, не поддерживается.
Данная реализация работает только на клиенте и использует некоторые функции и процедуры БСП (на сервере как первая так и вторая часть могут работать без ограничений, от БСП, при желании, достаточно просто избавиться). Никакие внешние компоненты не используются, все построено на обработке буферов двоичных данных. Код может содержать ошибки. Ссылка на спецификацию ZIP (на английском языке) и другие полезные ссылки приведены в модуле формы. В качестве URL крайне желательно указывать прямую ссылку к ZIP файлу, т.к. проверить переадресацию не удалось. Для упрощения тестирования нажатие на кнопку "Получить URL ГАР ФИАС" заполняет поле URL актуальной прямой ссылкой на файл ГАР ФИАС. Если нужно протестировать какой либо другой ресурс - URL вводится вручную. Далее при нажатии кнопки "Получить структуру архива" таблица заполняется строками каталога архива. Выбор конкретного файла или нажатие на кнопку "Извлечь файл" приводит к диалогу выбора каталога и последующей записи ZIP архива, содержащего выбранный файл.