docs: Opus analysis — reuse main upload logic
Deploy contracts-flask / validate (push) Successful in 0s
Deploy contracts-flask / validate (push) Successful in 0s
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
# 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`
|
||||||
Reference in New Issue
Block a user