import json import os import shlex import subprocess import sys from datetime import datetime from pathlib import Path from fastapi import FastAPI, File, UploadFile from fastapi.responses import HTMLResponse app = FastAPI() try: domain = os.environ["DOMAIN"] except KeyError: sys.exit("Environment variable 'DOMAIN' is missing!") @app.post("/uploadfiles/") async def upload_file(file: UploadFile = File(...)): content_type = file.content_type try: if content_type.startswith("video/"): output_folder = "Uploads/video" video_url = f"{domain}video/{file.filename}" Path(output_folder).mkdir(parents=True, exist_ok=True) elif content_type.startswith("image/"): output_folder = "Uploads/image" video_url = f"{domain}image/{file.filename}" Path(output_folder).mkdir(parents=True, exist_ok=True) elif content_type.startswith("text/"): output_folder = "Uploads/text" video_url = f"{domain}text/{file.filename}" Path(output_folder).mkdir(parents=True, exist_ok=True) else: output_folder = "Uploads/files" video_url = f"{domain}files/{file.filename}" Path(output_folder).mkdir(parents=True, exist_ok=True) except Exception as e: print(e) # TODO: Send to Discord print(file.filename) file_location = f"{output_folder}/{file.filename}" with open(file_location, "wb+") as file_object: file_object.write(file.file.read()) height, width = find_video_resolution(file_location) screenshot_url = get_first_frame(file_location, file.filename) html_url = generate_html( video_url, width, height, screenshot_url, file.filename, ) return { "html_url": f"{html_url}", "video_url": f"{video_url}", "width": f"{width}", "height": f"{height}", "screenshot_url": f"{screenshot_url}", "filename": f"{file.filename}", "content_type": f"{content_type}", } @app.get("/") async def main(): content = """