# Opus — анализ: переиспользовать логику загрузки Сверки для DrHider Файл: `/home/naeel/nubes/contracts/contracts-flask/History/opus-drhider-reuse-analysis-2026-06-29.md` 29.06.2026 ## Ключевые выводы ### 1. JS: копировать паттерн, не 1:1 Основная загрузка в `/home/naeel/nubes/contracts/contracts-flask/deploy/files.js`: - `XMLHttpRequest` + `FormData` + `xhr.upload.onprogress` - Один файл, ждёт JSON с `doc_id` - Умеет `.doc → /convert-doc` Для DrHider адаптировать: - `files.forEach(f => fd.append('files', f, f.name))` — много файлов - `xhr.responseType = 'blob'` — ждём ZIP - `onload` → скачивание ZIP - POST на `VM_API + '/api/drhider'` - Drag&drop оставить из текущего drhider.html ### 2. parse_multipart — для ОДНОГО файла `/home/naeel/nubes/contracts/contracts-flask/deploy/services/upload.py:parse_multipart` берёт `fs["files"]`, если список — `item[0]`. Только первый файл. Нужен мульти-парсер той же техникой: `cgi.FieldStorage` + пройти по всем элементам `fs["files"]`. ### 3. _handle_drhider: заменить JSON/base64 на multipart Локальная правка ~15 строк: - `content_type = self.headers.get("Content-Type")` - `cl = Content-Length`, `raw = self.rfile.read(cl)` - Мульти-парс → `files` - Остальное не трогать: `obfuscate_files(files, llm_client=_VMLLM())` + отправка ZIP ### 4. Nginx: нужен CORS + timeout Текущий `/api/` — 30s timeout, без CORS для OPTIONS. Для `/api/drhider`: - `client_max_body_size 100m` - `proxy_read_timeout 300s` - CORS: preflight OPTIONS + `Access-Control-Allow-Origin` ### 5. Рассинхрон бэкендов drhider.html шлёт на относительный `/api/drhider` → managed Flask. Нужно: слать на `https://contracts.kube5s.ru/api/drhider` (VM напрямую). Flask-обработчик убрать. ## План правок 1. `/home/naeel/nubes/contracts/contracts-flask/site/templates/drhider.html` — JS: XHR+FormData вместо fetch+JSON, URL на VM 2. `/home/naeel/nubes/contracts/contracts-flask/deploy/convert_server.py` — `_handle_drhider`: multipart вместо JSON 3. `/etc/nginx/sites-enabled/nginx-contracts.conf` — CORS для `/api/drhider` 4. `/home/naeel/nubes/contracts/contracts-flask/site/app.py` — убрать `/api/drhider`