File size: 2,558 Bytes
a957bcd
14fd956
d3af375
d32fe66
dce9570
c2e3603
b916cdf
d3af375
 
 
 
 
 
 
 
 
 
 
b916cdf
 
1299710
 
 
 
dce9570
 
 
c2e3603
d3af375
c2e3603
 
d28c58d
c2e3603
 
 
 
 
 
 
dce9570
2926b0b
c73e7bc
4b5a56f
dce9570
1299710
2926b0b
2d683a3
2926b0b
 
d32fe66
 
c2e3603
a957bcd
c2e3603
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from fastapi import FastAPI, HTTPException, Body, Request, File, UploadFile, BackgroundTasks
from pydantic import BaseModel
import logging
from fastapi.responses import JSONResponse
from fastapi.templating import Jinja2Templates
import httpx

# Настройка логгера
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# Создание обработчика для вывода в консоль
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)

app = FastAPI()

# Определяем модель данных для запроса
class TextRequest(BaseModel):
    text: str

# Подключаем шаблоны Jinja2
templates = Jinja2Templates(directory="templates")

async def send_post_request(url: str, filename: str):
    logger.info(f"POST request must be sent to {url} with filename: {filename}")
    try:
        async with httpx.AsyncClient() as client:
            response = await client.post(url, data={"text": filename})

        # Проверяем статус код ответа
        if response.status_code != 200:
            raise HTTPException(status_code=response.status_code, detail="Request failed")
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Failed to send POST request: {str(e)}")

# Главная страница с текстом "server is running"
@app.get("/")
async def read_root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request, "text": "server is running"})

# Определяем единственный POST endpoint
@app.post("/echo")
def echo_text(text_request: TextRequest):
    # Просто возвращаем поле text из запроса
    return {"echoed_text": text_request.text}

# Endpoint для загрузки файла
@app.post("/upload/")
async def upload_file_and_post(file: UploadFile = File(...), url: str = "", background_tasks: BackgroundTasks = BackgroundTasks()):
    try:
        # Добавляем задачу на отправку POST запроса в фоновые задачи
        background_tasks.add_task(send_post_request, url, file.filename)

        # Возвращаем имя файла в ответе
        return JSONResponse(content={"filename": file.filename})
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))