import random import shutil import string import os from fastapi import FastAPI, UploadFile, Query from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel def generate_random_string(length=16): """Генерирует случайную строку заданной длины.""" characters = string.ascii_letters + string.digits return ''.join(random.choice(characters) for _ in range(length)) app = FastAPI( prefix="/api", tags=["Сервак для загрузки"], ) origins = [] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"], allow_headers=[ "Content-Type", "Set-Cookie", "Access-Control-Allow-Headers", "Authorization", "Accept" ], ) app.mount("/static", StaticFiles(directory="app/static"), name="static") @app.post('/upload_avatar', response_model=dict[str, str]) async def upload_avatar(file: UploadFile): name = generate_random_string() image_url = f'static/images/avatars/{name}_avatar.png' with open('app/' + image_url, 'wb+') as file_object: shutil.copyfileobj(file.file, file_object) return {'image_url': image_url} @app.post('/upload_image', response_model=dict[str, str]) async def upload_image(file: UploadFile): name = generate_random_string(50) image_url = f'static/images/images/{name}_image.png' with open('app/' + image_url, 'wb+') as file_object: shutil.copyfileobj(file.file, file_object) return {'image_url': image_url} @app.post('/upload_background', response_model=list[str]) async def upload_background(file: UploadFile): name = generate_random_string() image_url = f'static/images/backgrounds/{name}_background.png' with open('app/' + image_url, 'wb+') as file_object: shutil.copyfileobj(file.file, file_object) backgrounds = ['static/images/backgrounds/' + background for background in os.listdir('app/static/images/backgrounds')] return backgrounds