3.3 KiB
3.3 KiB
v0.0.47 — Выбор целой папки (рекурсивно, как раскрытие ZIP) — 2026-08-19
Проблема
Нативный <input type="file"> (site/templates/index.html:133) не умеет выбирать
папку целиком: клик по папке просто «входит» внутрь. Нужно выбирать целую папку
и рекурсивно забирать все файлы — как при раскрытии архива.
Решение
- Второй
<input type="file" id="folderInput" webkitdirectory multiple>+ кнопка «📁 Выбрать папку» (вызовfolderInput.click()).webkitdirectoryвзаимоисключающ с обычным выбором файлов на одном input — поэтому отдельный input, а не переключатель. - Браузер сам отдаёт ВСЕ файлы папки рекурсивно (включая подпапки) с полем
file.webkitRelativePath. Имя добавляемого файла =webkitRelativePath(структура папок сохраняется до итогового ZIP, как у архива сохраняется внутреннийe.name). - Обработка — та же логика, что у раскрытия ZIP (
listZipFiles):.zip→ рекурсивное раскрытие (вложенные zip тоже);- документы
.pdf .doc .docx .txt .md→ в таблицу; - прочее (картинки и т.п.) → пропускается.
- Сортировка входящих файлов по
webkitRelativePath— детерминированный порядок.
Файлы
site/templates/index.html- CSS:
.folder-btn(полная ширина),#folderInput { display:none } - HTML: скрытый
#folderInput+ кнопка в.file-input-wrap - JS:
const folderInput, обработчикchange(рекурсия+фильтр+имена с путями) resetAll()иload— сбросfolderInput.value
- CSS:
site/app.py— VERSION 0.0.46 → 0.0.47
Бэкенд — не менялся
extract_text(drhider/extractor.py:204) берёт расширение черезos.path.splitext— пути в имени не мешают.build_zip(drhider/builder.py) пишетZipInfoс путями как есть;_resolve_nameдедуплицирует по полному имени — одноимённые файлы в разных подпапках не сталкиваются.- Аплоад идёт из массива
sf(uploadFiles), а не изfi.files— файлы из папки уходят на бэк обычным путём.
Проверка
- «Выбрать папку» → папка с подпапками, вложенными .zip и картинками → в таблице только документы, рекурсивно; .zip раскрыт; картинки пропущены; имена с путями.
- Обфускация → скачать ZIP → вложенность папок сохранена, всё обфусцировано.
- Регрессия: обычный «Выбрать файлы» работает как раньше.