from fastapi import FastAPI, File, UploadFile, Form, Request from fastapi.staticfiles import StaticFiles from starlette.templating import Jinja2Templates import shutil import models description = """ Oki.cx is a API for uploading file to a Server to be shared via HTTP. ## Response Types - HTML Response - JSON Response """ app = FastAPI( title="Oki.cx - Fileshare", description=description, version="0.1", terms_of_service="http://oki.cx/fileshare/tos", contact={ "name": "oki.cx", "email": "cody@oki.cx", }, license_info={ "name": "MIT License", "url": "https://gitlab.oki.cx/mrpvtdagger/oki.cx-fileshare/-/raw/main/LICENSE", }, ) templates = Jinja2Templates(directory="templates") app.mount("/static", StaticFiles(directory="static"), name="static") @app.get("/", include_in_schema=False) def home(request: Request): return templates.TemplateResponse("base.html",{"request": request, "is_hidden": "is-hidden"}) @app.post("/upload/{response_type}") def file(request: Request, response_type: str, file: UploadFile = File(...)): uploaded_file = models.UploadFile(file, file.filename, file.content_type) if response_type.lower() == "json": return uploaded_file else: return templates.TemplateResponse("html_response.html",{"request": request, "uploaded_file": uploaded_file, "filename": file.filename})