uploader_server/app/main.py

67 lines
2.1 KiB
Python

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