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