57 lines
2.6 KiB
Markdown
57 lines
2.6 KiB
Markdown
# 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`
|