Files
contracts/History/how-to-convert-doc.md
T

90 lines
2.6 KiB
Markdown

# Как подключить конвертацию .doc → .docx
Сервис: **https://liberta.containerk8s.dev.nubes.ru**
## API
**Конвертация:**
```bash
curl -X POST -F "file=@документ.doc" https://liberta.containerk8s.dev.nubes.ru/convert -o результат.docx
```
**Проверка:**
```bash
curl https://liberta.containerk8s.dev.nubes.ru/health
# → {"ok":true,"version":"1.0.0"}
```
## Интеграция в Python (как в Сверке)
### 1. config.py — URL сервиса
```python
CONVERT_SERVICE_URL = os.getenv(
"CONVERT_SERVICE_URL",
"http://containerk8s.df36c8af-1a95-4623-b551-0d37b731ccca.svc.cluster.local:5000"
)
```
### 2. upload_bp.py — замена subprocess на HTTP
```python
import httpx
import config
@upload_bp.route("/convert-doc", methods=["POST"])
def convert_doc():
f = request.files.get("files")
if not f:
return jsonify(ok=False, error="no file"), 400
try:
resp = httpx.post(
config.CONVERT_SERVICE_URL + "/convert",
files={"file": (f.filename, f.read(), f.content_type or "application/msword")},
timeout=120,
)
if resp.status_code == 200:
return send_file(io.BytesIO(resp.content), mimetype="...docx")
return jsonify(ok=False, error=resp.json().get("error")), 500
except httpx.TimeoutException:
return jsonify(ok=False, error="conversion timeout"), 500
```
### 3. files.js — фронтенд
```javascript
var CONVERT_URL = '/convert-doc';
// Перед uploadFile: если .doc → сначала convertDoc()
async function convertDoc(file, onProgress) {
var fd = new FormData();
fd.append('files', file, file.name);
var resp = await fetch(CONVERT_URL, { method: 'POST', body: fd });
if (!resp.ok) throw new Error('Конвертация: HTTP ' + resp.status);
var blob = await resp.blob();
return new File([blob], file.name.replace(/\.doc$/i, '.docx'), {
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
});
}
```
## Топология
```
Браузер → POST /convert-doc (Flask-сервер)
↓ httpx
liberta:5000/convert (libreoffice)
.docx обратно
обычный upload + парсинг
```
## Деплой liberta
Образ: `gitea.services.ngcloud.ru/nail/contractor-convert:latest`
Рецепт: `~/nubes/contracts/convert-service/`
- Dockerfile: python:3.12 + libreoffice + flask
- Платформа: pythonk8s
- Порт: 5000
- Память: 1024 MB
- CPU: 500m
- Реплики: 1