-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
63 lines (52 loc) · 1.84 KB
/
main.py
File metadata and controls
63 lines (52 loc) · 1.84 KB
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
63
from fastapi import FastAPI, Request, UploadFile, HTTPException, Form
from fastapi.responses import RedirectResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from typing import Annotated
import os
import shutil
from pathlib import Path
from utils.file import createItemObj
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
UPLOAD_DIR = os.getenv("UPLOAD_DIR", "./ExampleRoot")
os.makedirs(UPLOAD_DIR, exist_ok=True)
BASE_DIR = Path(UPLOAD_DIR).resolve()
@app.get("/")
def index():
return RedirectResponse("/dashboard")
@app.get("/dashboard")
def dashboard(request: Request):
return templates.TemplateResponse(request, "dashboard.html")
@app.get("/upload")
def upload(request: Request):
return templates.TemplateResponse(request, "upload.html")
@app.post("/upload")
async def upload(request: Request, file: UploadFile):
file_path = os.path.join(UPLOAD_DIR, file.filename)
try:
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error saving file: {e}")
finally:
await file.close()
return templates.TemplateResponse(request, "success.html")
@app.get("/browse/{current_directory}")
#TODO: File should not be ABSOLUTE DIRECTORY, make it relative
def browse(current_directory: str, request: Request):
items = os.listdir(current_directory)
createItemObj(items, current_directory)
directory = {
"name": current_directory,
"item_amount": len(items)
}
return templates.TemplateResponse(
request,
"browse.html",
{
"directory": directory,
"items": items,
},
)